-
9.0.0-alpha.8
Pre-releaseSome checks failedGenerate Release / semantic-release (push) Has been skippedBuild Release / Preparations (push) Successful in 12sDocker Test / build image (push) Successful in 17m45sDocumentation / Help image (push) Successful in 3m4sDocumentation / Writerside webhelp (push) Successful in 2m30sQodana / notify (push) Successful in 9sQodana / scan (push) Successful in 11m16sBuild Release / Docker images (push) Successful in 19m8sBuild Release / JARs, media and checksums (push) Successful in 32m22sTest / build (push) Successful in 43m21sBuild Release / Forgejo release (push) Successful in 3m31sBuild Release / Publish Maven (push) Failing after 4m54sBuild Release / News on Discord (push) Has been skippedBuild Release / VirusTotal scan (push) Successful in 1m39sBuild Release / Mirror release outward (push) Has been skippedDocker Test / build image (pull_request) Successful in 21m56sTest / build (pull_request) Successful in 16m11sreleased this
2026-09-09 20:48:47 +02:00 | -1023 commits to main since this release⚠ BREAKING CHANGES
- api: publish every version meta as a snapshot, not as live state
- clientside: delete Confidence and aggregateFor
- grinder: one deploy script, with the mode decided by uid
- clientside,grinder,app: remove the headless-browser download route
✂️ Refactor
- clientside: ask the learned refs once in mappingsFor (61e0bc9)
- clientside: delete the dead deriveStems, keeping what it documented (850f89c)
- clientside: gather patch neighbours from one set, not two (579c7cf)
- clientside: move the confidence fold into the companion (33cec03)
- clientside: one ambiguity fold, and no nullable reason to interpolate (9b58349)
- clientside: one type for what a boot did, not two (2a194ce)
- clientside: read the placeholder marker without a deprecated call (1ebfd7d)
- clientside: route every boot attempt through one BootVerifier.boot (c3fe991)
- clientside: the audit's three LOW code findings (9ee88ba)
- clientside: the ladder reads its patterns from the rules file (d2d08c7)
- grinder: drop the dead decisive() from the fallback renderer (b174662)
- grinder: escape the Scanned cell like every other one (4e4cd96)
- grinder: extract the configuration and the sweep out of main (6de769d)
- grinder: rename CrashLogStore to BootLogStore (6ec7dc0)
- grinder: stop depending on Confidence (a9ed8e7)
📔 Docs
- audit and analyse today's commits (cf6cdc3)
- clientside 438 -> 466 in the root status table (b37d74a)
- clientside 466 -> 471 in the root status table (f4cf9ab)
- clientside 475, grinder 509 in the root status table (955319d)
- close B35 per the backlog's own convention and record the census (f7ffd9d)
- close B36 — the store was reset, so the requeue was never needed (8b5248a)
- close both audit logs — every finding resolved or accepted (786b7bf)
- close the documentation debt both batches left (309a0ff)
- close the landing obligations for the decisive-evidence gate (d64b649)
- close the plugin-recursion issue and record how it hid (127c3ec)
- commit the iteration-41 audit that was sitting in the working tree (e053654)
- complete the Refactor-state migration whose other half was committed by mistake (7e484cc)
- correct the grinder suite count for the new endpoint guards (a2580fd)
- correct the grinder suite count in the log (142f53d)
- file B35 for the verdict store per-record whole-file rewrite (746c0dd)
- file B36 — the published HIGH verdicts need re-grinding after deploy (592f1ce)
- mark the superseded precedence as history, and correct the suite count (659bb6f)
- plugin-grinder 72 -> 73 in the root status table (f50c867)
- record B6's merge gate — HIGH 8 -> 4, controls held, no regressions (3af47ea)
- record both dependency defects and the test-boundary lesson (7c54a0f)
- record feature B and the two inverted safety properties (f0bbd89)
- record that a survived boot counts, and that a refusal names the lock (93cedad)
- record that CI caught the clean-build break and the red went unactioned (f68041c), closes #301 #306
- record that optional dependencies are flagged, not required (cb72743)
- record the analysis fixes and the audit sweep that found nothing open (7425f22)
- record the audit resolutions and the landmines they produced (c6833b3)
- record the audit's resolution, the boot's owner, and the crash-log store (e78fd65)
- record the by-file dependency count and the clean-build gap (aef58a4)
- record the decisive-evidence gate and the census that justified it (8695a52)
- record the Docker IT, B0 regression and Fabric API acceptance runs (16a0d4c)
- record the equivalence check against develop's test tree (4107e86)
- record the equivalence proof, its four signature changes and 16 deltas (22759c3)
- record the four-verdict result system and where its rules live (8e337ff)
- record the hostname, Forge-launch and scan-date findings (5cbce8e)
- record the live verification of per-attempt boot-log capture (b6ec278)
- record the Logs column sort in the grinder's snapshot (557ad1f)
- record the measured ServerStarterJar/Forge range (84a6d58)
- record the plugin module and the new grinder endpoint (1a62eed)
- record the re-grind queue and its three placement landmines (f210c8c)
- record the report query layer and its measurements (fbab42c)
- record the rules' measured recovery and the poisoned cache tuple (1e5b21d)
- record the shared staging directory behind the 26.2 boots (5c4fcfa)
- record the source-jar entry and the re-check that stayed local (7a7d9e9)
- record the tmpfs exec decision and what noexec was costing (4ffe309)
- record the two-pattern split and why only one is publishable (7706a4c)
- record what the crash-log census changed in the clientside engine (7ac5a5b)
- record why a jar's own range now re-selects instead of refusing (b8a6081)
- record why the browser download route is gone, in every place that claimed it (125d64f)
- refresh the clientside row after the three field-report fixes (6c8f066)
- regenerate the license report after the Playwright removal (e42cb53)
- sync the suite counts after restoring the shutdown guards (9568120)
- the 2026-09-08 audit and analysis of the backtrack range (997051d)
- the analysis and audit, in the refactor log (86d3d44)
- the audit findings, and the gate that keeps the patch fallback safe (c2123f2)
- the six verdicts, and the three ways a dependency was "unavailable" (a8d1dab)
- api: document the eight declarations dokka reported undocumented (428c6e7)
- app: document GuiProps, ConfigEditor, BeanConfiguration and the CLI parsers (c61329a)
- app: document the modpack/storage/stats services and the entry point (715eaa7)
- app: document the settings panels, GUI components and task queue (f81c4ba)
- app: document the web entities, stats and the scroll components (edd1be0)
- app: finish the dokka backlog — 626 → 0 undocumented (acfed4b)
- audit: cite commit subjects, and correct the premise the rebase was proposed on (ab13c6f)
- audit: close iteration 33, and add the convention MED-3 earns (f397a11)
- audit: iteration 25 — shutdown during a re-grind drain, and a log line that prints a data class (ef88492)
- audit: iteration 26 — a negative sleep, an unbounded read, and a URL nobody checks (35f6206)
- audit: iteration 27 — findings and resolutions (997fb21)
- audit: iteration 28 — header/cell coupling, sibling-marker review (7dcbd10)
- audit: iteration 29 — the template change (5ef46ce)
- audit: iteration 30 resolutions and the iteration 31 re-audit (6d0c62b), closes #301 #306
- audit: iteration 32, and fix the api suite count it found stale (712f633)
- audit: name the dead commits by subject, and record the repo-wide citation sweep (d83dfd9)
- audit: record the history rebuild that closed MED-1, LOW-1 and MED-2's instances (0930519)
- audit: resolutions for iterations 25 and 26 (1d221ef)
- ci: record the two mirror failures, and why
newsis not gated on the mirror (01cc1f2) - clientside,grinder: document what dokka reported undocumented (9000e99)
- clientside: close the candidate half of the untagged-loader rule (361db79)
- clientside: document the backtrack's data classes, and reunite one orphaned KDoc (03032f4)
- clientside: landmine the silent rung, and correct two counts that had drifted (49ffa77)
- clientside: name every prevented-grind path, not just the staging ones (ccc839b)
- clientside: re-attach seven KDoc blocks, and correct the decisive set (d72a949)
- clientside: record the confidence-keyed refusal split (d8239ca)
- clientside: record the Connector-placeholder scanner redirect (de7245e)
- clientside: record the decorated-version defect and the refusal vocabulary (ab27873)
- clientside: record the dependency-set backtrack (9f2f5a2)
- clientside: record the NeoForge/Forge 1.20.1 parity band (7ad0a77)
- clientside: record the nested-jar blind spot in the backtrack (5e84224)
- clientside: record the untagged-loader landmine and the candidate half (e05f2ef)
- clientside: record the version-range fixes and the open CurseForge gap (8514e93)
- grinder: correct the claim that Logs is meaningless to sort (62e41bb)
- grinder: document the boot-rule status field and drop a stale claim (1007993)
- grinder: landmine the four defects worth not re-introducing (2ac1d8e)
- grinder: re-attach six KDoc blocks that documented nothing (f131d2e)
- grinder: record sortKey and the single confidence rank table (9de940d), closes #4
- grinder: record the missing-image outage and what it changed (7b45d7f)
- grinder: repair three KDoc links to the deleted Confidence type (482f54c)
- plugin-example: document the addons logger companion (57d22b5)
📦 Other
- api: refresh the shipped manifest snapshots (89639fc)
- clientside: correct three statements this branch made stale (37158ae)
- plugin-grinder: ignore the module's ServerPackCreator test home (22d3143)
🦊 CI/CD
- drop the Playwright dependency and its CI prerequisite (5dc2002)
🧪 Tests
- close the coverage gaps the analysis found (M-3, M-4, M-5, L-1) (4dcf250)
- api,clientside: pin that an optional dependency is not a requirement (5029ef9)
- api,clientside: pin that quilt_base is a mod, not the Quilt platform (24aa11c)
- api: pin B0's generation regression check, and the gap it found (18fa4ec)
- api: pin every Minecraft list accessor, not the three written down (8bb194e)
- api: pin Fabric API as a dependency and every declared version range (5027907)
- api: pin that a missing malware scanner cannot abort generation (0029414)
- api: pin that a Quilt pack scan keeps a Fabric jar's dependencies (5788bab)
- api: pin that a scan reports the Minecraft the jar declares (b54b4df)
- api: pin that an extension belongs to one plugin (bbfdf42)
- api: pin that an unreadable Minecraft version takes the bypass (ad4ef05)
- api: pin that no version meta hands out live state (fdbedd4)
- api: pin that setupQuilt notices a pack with no Minecraft server jar (4a84a2d)
- api: pin that version metadata is not handed out as live state (7ae95ab)
- api: pin which Forge versions bypass the ServerStarterJar (ec19d82)
- api: reproduce the plugin-loading recursion in the suite (b5f74ee)
- clientside,grinder: pin per-attempt staging to (platform, slug, loader) (638cbf0)
- clientside,grinder: pin whose boot disproves, and whose identity is reaped (b70bbf7)
- clientside: characterize the filename pattern before depending on it (da56caa)
- clientside: close the coverage gaps the same-day analysis found (89ae3d8)
- clientside: pin a crash re-check spanning loaders and Minecraft lines (1f4dea4)
- clientside: pin a loader that never bootstrapped as inconclusive (7f8aa8b)
- clientside: pin all sixteen ladder rungs, not ten of them (930e2a6)
- clientside: pin an unreadable @argfile as inconclusive (b74e624)
- clientside: pin bumping the pack to a version the jar itself accepts (f0a6d5c)
- clientside: pin comma-separated unions of version ranges (c972efb)
- clientside: pin operator-editable console rules and their place in the ladder (f12b9db)
- clientside: pin that a bundled dependency is never fetched or missing (5f60a72)
- clientside: pin that a component too large to represent is unreadable (9fbfffa)
- clientside: pin that a confirmation names the rule that decided it (9e39825)
- clientside: pin that a Connector placeholder is scanned as Fabric (0396459)
- clientside: pin that a constraint narrows dependency choice but never empties it (2ebc6b0)
- clientside: pin that a dependency is sought at the version being booted (2f31bd8)
- clientside: pin that a dependency never crosses a Minecraft version (c065ce9)
- clientside: pin that a dependency the jar never asks for cannot refuse a boot (fd1a164)
- clientside: pin that a file carries every project its page links (66a10b3)
- clientside: pin that a jar staged under two refs counts once (3c110a0)
- clientside: pin that a loader too old for the mod is re-checked (0e8de06)
- clientside: pin that a mapped, resolved, unstageable dependency refuses (3d79f0d)
- clientside: pin that a mod cannot claim the launcher's excuse (ff8dc82)
- clientside: pin that a Modrinth source jar is not a mod file (bcc8021)
- clientside: pin that a nested library's version reaches the conflict check (f8326eb)
- clientside: pin that a pack with no server jar is inconclusive (1a8dea2)
- clientside: pin that a refusal names mods, not platform ids (5568b0a)
- clientside: pin that a resolved dependency knows its own name (fbea4b0)
- clientside: pin that a rule which decided a boot is named on the verdict (4c7bcba)
- clientside: pin that a self-contradicting dependency set backtracks (be01428)
- clientside: pin that a staged dependency cannot refuse its own boot (d2a6f0d)
- clientside: pin that a survived boot counts, and a locked download says so (6d6bdfe)
- clientside: pin that a wrong-Minecraft dependency is dropped pre-boot (17dfa82)
- clientside: pin that an all-untagged project is still ground (acc44f2)
- clientside: pin that an unmet dependency names why it is unmet (0ed2674)
- clientside: pin that an unobtainable dependency is not preferred (a4e2c82)
- clientside: pin that an unreadable staged version is not a conflict (9d67140)
- clientside: pin that an unresolved required id asks the linked projects (7a66dc5)
- clientside: pin that an untagged file is unknown, not incompatible (6410c9f)
- clientside: pin that attribution annotates and never moves a verdict (7ac7da0)
- clientside: pin that client-only proof is about the mod, not the build (901b03f)
- clientside: pin that every ladder rung finds its bundled pattern (312459e)
- clientside: pin that extracting the ladder into rules changes no verdict (1312bc0)
- clientside: pin that Fabric API's modules resolve to Fabric API (b011ac5)
- clientside: pin that folding no unmet dependencies answers, not throws (17d8332)
- clientside: pin that metadata sideness is decided by rules too (dd549fb)
- clientside: pin that NeoForge runs Forge mods on Minecraft 1.20.1 (821b2d3)
- clientside: pin that one mod id can be served by two projects (ac5bdcd)
- clientside: pin that QSL's module ids resolve to QSL (20f12f7)
- clientside: pin that the learned map can outlive the process (056246f)
- clientside: pin that there is one download route and no browser fallback (6ff2b4b)
- clientside: pin that YACL's versioned mod id resolves to its project (5142840)
- clientside: pin the ambiguity rule across a pack, not just within a jar (838f35a)
- clientside: pin the client-library evidence that shipped as an example (a2dfcb4)
- clientside: pin the environment excuses the crash logs demanded (5c3df0a)
- clientside: pin the fold that replaces aggregateFor (69b23fe)
- clientside: pin the four-state verdict, and that a prevented grind is an Error (c6790cd)
- clientside: pin the id-to-project mapping learned from staged jars (3e104eb)
- clientside: pin the manifest-id to platform-project mapping (50f3a01)
- clientside: pin the patch-version dependency fallback (fd732d3)
- clientside: pin the per-attempt boot-artifact sink (b291160)
- clientside: pin the refusal path the first label fix missed (63521e8)
- clientside: pin the refusal split on mapping confidence (08a40a6)
- clientside: pin the two platform shapes that produced live false positives (576912c)
- clientside: pin the two prevented-grind paths the redesign missed (c453b8d)
- clientside: pin the version a jar's own range would have us pick (d2fb045)
- clientside: pin version-constraint matching across both loader grammars (211a639)
- clientside: pin what a finished boot leaves behind (4002b42)
- clientside: pin which rung decided a boot, against five real logs (cc3cbb1)
- clientside: pin which unmet dependencies may refuse a boot (89d388e)
- clientside: pin who a prevented grind is blamed on (ed492bf)
- clientside: reproduce JEI's refusal — a jar range that excludes its own version (f980c13)
- clientside: separate the two dependency-preference arms that never were (dbd6864)
- grinder: execute the dashboard's script under node (e91c4d6)
- grinder: gate the store benchmark and answer B35 with numbers (375f1bb)
- grinder: hold the loader-line wiring the step-down pin never reached (def87f1)
- grinder: pin --requeue-since, the selector an outage needs (0836c71)
- grinder: pin a durable home for crash consoles, and the endpoint buttons (bde4f73)
- grinder: pin a non-negative slice, a bounded crash-log read, and a rejected link (7f5a8c5)
- grinder: pin a self-contained live dashboard for /status (179b292)
- grinder: pin an immediate re-grind queue that ignores freshness (552b49f)
- grinder: pin coalesced verdict writes (B35) (c9275c5)
- grinder: pin each column against its own sentinel before restructuring (4265c07)
- grinder: pin every field of the LoaderVerdict-to-GrindVerdict mapping (991fea0)
- grinder: pin per-attempt keeping, pruning, the budget and adoption (6702820)
- grinder: pin sorting by the Logs column (056fc55)
- grinder: pin template provenance on the path production takes (0531ce6)
- grinder: pin that a blamed dependency is queued, and record the live run (47ccb99)
- grinder: pin that a boot can execute from its own tmpfs (5d57bfa)
- grinder: pin that a boot container can resolve its own hostname (775a41f)
- grinder: pin that a crashed boot's console is copied out of staging (c8bbf85)
- grinder: pin that a failed install is not reported as a skipped one (2ee4925)
- grinder: pin that a failed queue write leaves no scratch behind (c5e1c56)
- grinder: pin that a missing runtime image stops the daemon (ac3f151)
- grinder: pin that a restored id with no usable ref leaves no entry (d7596cf)
- grinder: pin that a thrown loader install names the exception (ba09ca0)
- grinder: pin that an unavailable loader install says why (5c420cf)
- grinder: pin that an unreadable verdict store is not overwritten (b1b9c4f)
- grinder: pin that an unusable knob value falls back like an unparseable one (f433539)
- grinder: pin that confidence sorts by severity, not alphabetically (13de74b)
- grinder: pin that every table header has a cell beneath it (bfc1278)
- grinder: pin that Fabric and Quilt can step down a loader build (436de8f)
- grinder: pin that Forge boots from its argfile, not the starter jar (8c306f7)
- grinder: pin that only a confirmation is published (6e8cd71)
- grinder: pin that the container-stop drain gives up (cdc45ba)
- grinder: pin that the pass counter is not shadowed (96701a3)
- grinder: pin that the report and CSV speak the four verdicts (34e405b)
- grinder: pin the declared sideness and jar scan on a recorded verdict (c0a81f0)
- grinder: pin the file that carries the learned map across restarts (da10248)
- grinder: pin the Filename column beside the name pattern (eaf52b5)
- grinder: pin the JSON verdict feed the GUI plugin reads (1b671e6)
- grinder: pin the per-pass counters as per-pass (c097498)
- grinder: pin the report server's favicon (3c534e0)
- grinder: pin the scan date on the overview and in the CSV (4dd5c24)
- grinder: pin the shutdown gap, the live pass size, and a sliced wait (d20fc2c)
- grinder: pin verdict filtering, sorting and paging as a pure unit (ef5f159)
- grinder: prove the Logs sort through the real handler (aca684c)
- grinder: restore the five shutdown guards a refactor deleted (audit H1) (3ef3930)
- plugin-grinder: pin the audit's four findings and the missing edge cases (70301ac)
- plugin-grinder: pin the clientside-entry injection (732fdc7)
- plugin-grinder: pin the Declared and JAR sideness columns (03cf347)
- plugin-grinder: pin the URL rule, the client and the selection store (98ecefc)
- plugin-grinder: pin the verdict table's selection logic (758ea95)
🚀 Features
- ci: announce releases on Discord from Forgejo (4f42a76)
- clientside,grinder,app: remove the headless-browser download route (04e746a)
- clientside,grinder: a verified LWJGL rule, and the harness defect it found (3fd6eb8)
- clientside: ask the linked projects when a required id resolves to nothing (b99a850)
- clientside: collect a boot's console, server logs and crash reports (ebc72b3)
- clientside: fold one loader's evidence into the four-state verdict (fa3400a)
- clientside: hand every boot attempt's artifacts to a sink (a6f9292)
- clientside: learn the id-to-project bridge from the jars staging downloads (e504d1c)
- clientside: let an operator's console rules decide a boot (0d0b43d)
- clientside: LOCKED and UNVERIFIABLE, so ERROR means what it says (8093d4b)
- clientside: map a manifest mod id to its platform project ref (fb4d5bd)
- clientside: match a dependency file against its declared constraint (1a3d715)
- clientside: match a mod file's version against its declared constraint (bdd9cd9)
- clientside: metadata sideness is decided by rules, not by a hardcoded fold (5ed6357)
- clientside: name the rule that decided a boot, on the outcome itself (9eaf2a3)
- clientside: record the dependency a crash names, without moving the verdict (ffe3843)
- clientside: ship the built-in ladder as an editable rules file (53b2e16)
- clientside: split refusable dependencies from merely-unmapped ones (3d2c3c9)
- clientside: stage the dependencies a jar manifest declares alone (18f59b4)
- clientside: the four-state verdict and the pure policy that decides it (2c611da)
- clientside: delete Confidence and aggregateFor (8c18001)
- grinder: --bootstrap prepares a host that never ran the grinder (02b3fac)
- grinder: --clear installs onto a clean slate (d6cf580)
- grinder: --requeue-since, for a window the daemon was broken in (4976ff7)
- grinder: a live, framework-free dashboard for /status (4e1e544)
- grinder: add an unattended update script for the deployed service (a087cdf)
- grinder: an immediate re-grind queue that jumps the crawl and the TTL (2376d75)
- grinder: audit a live grinder's published verdicts against their evidence (90bdb84)
- grinder: give the report a favicon (0c80e2a)
- grinder: grant the build account sudo for the run instead of demanding it (3658eee)
- grinder: install the headless browser prerequisite instead of warning about it (799fc95)
- grinder: keep crashed boots' consoles and reach every endpoint from the report (f94a4c7)
- grinder: keep every non-survived attempt's logs and link them per row (f249e18)
- grinder: make the verdict-less rule fallback an operator choice (41be7a2)
- grinder: persist the learned mod-id map to SPC_GRINDER_HOME (35c77cb)
- grinder: publish only confirmations, and record what the mod claimed (a7cda82)
- grinder: record the sideness and jar scan behind every verdict (6b86c1a)
- grinder: render the report from a server-side query (d41c37e)
- grinder: requeue a dependency blamed for a crash, and show the staged pack (1714da9)
- grinder: select verdicts server-side by search, filter, sort and page (b9b06be)
- grinder: serve verdicts as JSON at /verdicts.json (8338460)
- grinder: show the sampled artifact's pattern beside the published one (15c25dd)
- grinder: show when each mod was scanned (3b1392f)
- grinder: sort the report by the Logs column (8fc40bf)
- grinder: the report and CSV speak the four verdicts (d0adf2d)
- grinder: wire the console-rule file, its errors and the rule column (a05a259)
- grinder: one deploy script, with the mode decided by uid (f8f41db)
- plugin-grinder: fetch verdicts and persist the selection (c17cf9a)
- plugin-grinder: inject the selection into clientMods before generation (0a0c6e6)
- plugin-grinder: scaffold the module and its plugin descriptor (0885d32)
- plugin-grinder: show Declared and JAR sideness beside the verdict (9c3ef12)
- plugin-grinder: the four-pane GUI tab (a68204a)
🛠 Fixes
- api,clientside: an optional dependency is not a requirement (88a6a19)
- api,clientside: never boot a jar on a runtime it does not declare (2a073a0)
- api,clientside: quilt_base is a QSL module, so stop excusing it as the platform (98f183f)
- api,clientside: stop leaking exit hooks, keep errors visible, serialise refreshes (e716460)
- api: a malware scanner that cannot run must not abort generation (9808923)
- api: bypass the ServerStarterJar where it cannot launch Forge (c9106d0)
- api: fetch the Minecraft server jar for Quilt on its own terms (7e327da)
- api: keep a Fabric jar's declaration when scanning a Quilt pack (804efd8)
- api: load plugins as a step, after the API they reach into exists (1d7b05d)
- api: never compare an unreadable Minecraft version component (4af6631)
- api: publish version metadata as snapshots, not as live mutable state (7e2d49a)
- api: put the refresh coroutine on the lock it was supposed to take (a27b632)
- api: rescue a dependency by the ids a mod actually answers to (cd18edf)
- api: scope an extension lookup to the plugin it was asked about (431f3f8)
- api: stop excluding Fabric API and QFAPI, and record dependency version ranges (ea7933c)
- api: publish every version meta as a snapshot, not as live state (c3d2238)
- ci: probe the mirror before the release POST, and make
mirrorre-runnable (deafdd5) - clientside,grinder: a slug is not an identity — stage per platform (82c0c9c)
- clientside: a cross-loader survivor is not the verdict's own boot (43d5948)
- clientside: a dependency in the pack cannot refuse its own boot (f2d8b7d)
- clientside: a dependency the candidate ships is never fetched or missing (5154070)
- clientside: a digit-less wildcard constraint must accept, not refuse (edd9627)
- clientside: a grind that never ran is an Error, on every path (5a25860)
- clientside: a loader that never bootstrapped is not a mod crash (f3ca8d2)
- clientside: a Modrinth source jar is not a mod file (14c8539)
- clientside: a nested library counts as staged when judging the pack (2939982)
- clientside: a pack with no Minecraft server jar is a launch failure (f3e5575)
- clientside: a staging refusal names why each dependency is unmet (06c3ac3)
- clientside: a version component we cannot represent is unreadable (60a0e77)
- clientside: a version we cannot read is not evidence of a conflict (3156d60)
- clientside: an unreadable @argfile is a broken install, not a mod crash (c54637d)
- clientside: anchor the launcher's argfile excuse to line start (b88f502)
- clientside: backtrack a dependency whose demands the pack cannot meet (20f5895)
- clientside: bump the pack to a Minecraft version the jar itself accepts (79617c1)
- clientside: carry every linked project, not only the required ones (1a798cf)
- clientside: client-only proof is about the mod, so it crosses builds and loaders (a808a86)
- clientside: count a staged dependency once, by file rather than by ref (0761aef)
- clientside: count a survived boot, and say why a locked file would not download (5afd1ef)
- clientside: credit the deciding rule, not one that merely matched alongside (b5e08ec)
- clientside: do not remember an id a restore had no ref for (dd0482b)
- clientside: drop a dependency whose descriptor excludes the pack's Minecraft (ba2947a)
- clientside: fail a rule's missing or unreadable verdict safe to INCONCLUSIVE (b76a6c9)
- clientside: give a resolved dependency its real slug, on both platforms (742e9fa)
- clientside: grind a project whose files carry no loader tag (fb9d845)
- clientside: implement ModPlatform.name in the two test fixtures (b3d7e65)
- clientside: key the refusal split on mapping confidence, not distance (625145c)
- clientside: let NeoForge boot a Forge jar on Minecraft 1.20.1 (2329996)
- clientside: look for a dependency at the Minecraft version being booted (67b848f)
- clientside: LWJGL and FML's invalid-dist are decisive, and now shipped (bb82781)
- clientside: make a ladder rung that cannot find its pattern say so (0cd909f)
- clientside: make preventionCauseFor total (1b7f883)
- clientside: name the mod, not its platform id, when a dependency is missing (ad3bbbb)
- clientside: name the third refusal branch, and call a locked dependency locked (b3f50b6)
- clientside: never stage a dependency for another Minecraft version (6e3063a)
- clientside: prefer a dependency file that can actually be downloaded (307f3e5)
- clientside: publish only a crash that is decisive evidence of sideness (556efc0)
- clientside: re-check a crash across loaders and Minecraft lines (39d3403)
- clientside: re-check the newest loader build for any boot the build could explain (542f1fb)
- clientside: re-select a Minecraft version the jar accepts, don't refuse (793a5a7)
- clientside: read a comma-separated union of version ranges (3c19f8a)
- clientside: refuse when a mapped dependency has no usable file (b55e972)
- clientside: remember every project that proves a mod id, and try each (c7cbad2)
- clientside: resolve Fabric API's module ids to Fabric API (7062157)
- clientside: resolve QSL's module ids to QSL (cbf1f08)
- clientside: resolve YACL's versioned mod id to its project (ac9612f)
- clientside: scan a Connector placeholder as the Fabric mod it wraps (bcb9cfc)
- clientside: stage a dependency from a neighbouring patch release (3bd168f)
- clientside: stop scoring harness failures as the mod's crash (467a4da)
- clientside: the console decides, the metadata only declares (8d5e693)
- clientside: the jar decides which platform dependencies it actually needs (e018250)
- clientside: treat a file with no loader tag as unknown, not incompatible (98e2395)
- grinder: a slice that cannot go negative, a tail that is not read whole, a link that is refused (17df60c)
- grinder: actually consult the template-provenance check before serving a cached install (1ee6873)
- grinder: boot Forge from its argfile instead of the ServerStarterJar (02cc17e)
- grinder: bound the container-stop drain so shutdown cannot hang (eecbbd9)
- grinder: close the remaining audit-32 findings, and record what was not closed (5c51d78)
- grinder: close the shutdown gap the drain opened, and stop making a queued re-grind wait (447acaf)
- grinder: close the verdict store on shutdown, and stop shadowing it (acaf8d7)
- grinder: coalesce verdict-store writes (B35) (136d571)
- grinder: delete the queue's scratch file when a write fails (b3f538f)
- grinder: fall back when a knob is unusable, not only when it is unparseable (0e6eb1b)
- grinder: grade the audit per verdict, not per kept console (18cd412)
- grinder: leave the Forge launch path to the templates (a392857)
- grinder: let Fabric and Quilt step down a loader build (3a17016)
- grinder: log the exception a loader install threw, not only its message (8743571)
- grinder: make a boot container's own hostname resolvable (583d35f)
- grinder: mount a boot's tmpfs executable (00ac21d)
- grinder: prove chromium launches for the service account, not just that it installed (4ec3ba3)
- grinder: read the unit that systemd actually runs, not the checkout's pristine copy (c2b6596)
- grinder: reap the identity the staging was named from (0e717fe)
- grinder: refuse to deploy from a copy inside the checkout it wipes (e821d76)
- grinder: refuse to grind without the runtime image (1172eef)
- grinder: reset the per-pass counters when a pass begins (ae2c7de)
- grinder: say why a loader install is unavailable, not that none is cached (7bb2a32)
- grinder: sort confidence by severity, from a single rank table (8eff064)
- grinder: tell an attempted install apart from a suppressed one (b96ee46)
- grinder: the audit IT reads the CSV column that exists (84119c1)
- grinder: the dashboard links only absolute http(s) URLs (4fe0745)
- grinder: the pass-completion log prints the pass number again (59f7d71)
- grinder: tolerate unknown fields and preserve an unreadable verdict store (3f60ad3)
- plugin-grinder: close the audit's findings (ed8198d)
- plugin-grinder: give JAR sideness a width its commonest value fits in (b0bc490)
- plugin-grinder: widen Declared so CONTRADICTORY stops clipping (adb2174)
VirusTotal
ServerPackCreator-9.0.0-alpha.8.jar- https://www.virustotal.com/gui/file-analysis/MjU0ZTBjMjFlNGQxMzc2ZGZlMjEwMzFhMjkwNjBhZDI6MTc4ODk4NDUzOQ==serverpackcreator-api-9.0.0-alpha.8-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZjQzNDM2ZDZiZWMzMjEyOTBmNmFmMjI4YWQ2MDI2MDQ6MTc4ODk4NDU0MA==serverpackcreator-api-9.0.0-alpha.8-sources.jar- https://www.virustotal.com/gui/file-analysis/ZjA4MWM2MTBmNWQ2ZGY0MTViYjQyNjA4N2VhMDQ2OGU6MTc4ODk4NDU0Mg==serverpackcreator-api-9.0.0-alpha.8.jar- https://www.virustotal.com/gui/file-analysis/ZWEzNDE1ZTk1MTNmNjUzNGUwMjExMzRkMTVkMTMyNjY6MTc4ODk4NDU0NQ==serverpackcreator-app-9.0.0-alpha.8-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZGNlNGMxMWI4MDE3Yzc1ZGVmOGY0NjQxMzg3MjY0Mzc6MTc4ODk4NDU0OA==serverpackcreator-plugin-example-9.0.0-alpha.8.jar- https://www.virustotal.com/gui/file-analysis/ZDk4NDUwZTAyNmQzZjdkNWY2Y2Y0ZTBjMzYyNWIxYTQ6MTc4ODk4NDU0OQ==ServerPackCreator-9_0_0-alpha_8-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/NDE1YWUwNmI2NWRkNzY1ODA4MjE5YWFlYjYzNWViMDQ6MTc4ODk4NDU1OA==ServerPackCreator-9_0_0-alpha_8-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/OGU5NTk2ZDI5YjBhNDljMTE3OWFhNjAyMWJhMmY5Njg6MTc4ODk4NDU2Ng==ServerPackCreator-9_0_0-alpha_8-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/MjFkMGRhYjE5NDZkMjA3MDk5MDdhYzQ3YTk1MzY4N2U6MTc4ODk4NDU3OA==
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
9.0.0-alpha.7
Pre-releaseSome checks failedGenerate Release / semantic-release (push) Has been skippedBuild Release / Preparations (push) Successful in 56sDocker Test / build image (push) Successful in 18m7sDocumentation / Help image (push) Successful in 6m5sDocumentation / Writerside webhelp (push) Successful in 1m58sTest / build (push) Successful in 16m7sQodana / notify (push) Successful in 19sQodana / scan (push) Successful in 15m54sBuild Release / Docker images (push) Successful in 15m36sBuild Release / JARs, media and checksums (push) Successful in 34m52sBuild Release / Forgejo release (push) Successful in 3m29sBuild Release / VirusTotal scan (push) Successful in 3m8sBuild Release / Publish Maven (push) Successful in 8m16sBuild Release / Mirror release outward (push) Failing after 1m15sreleased this
2026-08-23 18:12:52 +02:00 | -556 commits to main since this release✂️ Refactor
- audit iteration 19's consistency findings, and the re-derived counts (4b9c056)
- clientside: extract the navigation options so they can be pinned (723394f)
- clientside: split staging from selection in prepareBootPack (45b7fac)
- grinder: drop a branch that cannot change an output (72dc9d2)
- grinder: read the container-user override in the entry point (c14e750)
📔 Docs
- audit iteration 17 — the container-identity branch (6054c0d)
- audit iteration 18, and the two findings it fixed in passing (f81c174)
- audit iteration 19 — third pass and the equivalence check (4a1b7a5)
- audit iteration 20 — the graceful-shutdown branch (975a951)
- audit iteration 21 — second pass over the shutdown work (95198b6)
- audit iteration 22 — third pass and the equivalence check (b01fed9)
- audit iteration 23 — the CPU-cap branch (b27b535)
- correct the clientside suite count to the 113 the run reports (b31667a)
- record iteration 23's resolutions, and why M3 stands (50987b7)
- record the container-identity outage and the /as-properties endpoint (76a6769)
- record the CPU-cap knob and the quota-without-period finding (751edb2)
- record the cross-loader reconciliation and the CurseForge window (8f8b165)
- record the memory knob and the heap derivation behind its warning (54d32af)
- record the other-version crash re-check and what arms it (ae2a11b)
- grinder: close the deployment gaps this outage ran into (31e6967)
- grinder: explain a crash weighed against another loader (415284e)
- grinder: tell the operator what a re-checked crash looks like (a0263c2)
- grinder: the shutdown contract, and the cgroup fact behind it (067ebc3)
🧪 Tests
- pin the two joins audit iteration 17 found unguarded (02d8a39)
- clientside: pin cross-loader reconciliation and CurseForge file paging (5b5151f)
- clientside: pin that a verdict's own console is the log that is kept (01f153a)
- clientside: pin that an aborted navigation means the download started (a435735)
- clientside: pin the other-version crash re-check (847bdd0)
- grinder: drive SPC's real updater against the live /as-properties (c3cbf50)
- grinder: pin audit iteration 17's two silent-corruption findings (93bbab2)
- grinder: pin audit iteration 21's two shutdown gaps (8236c93)
- grinder: pin how the CPU cap is reported to the operator (f3b72af)
- grinder: pin that a failed install names an unwritable mount (5ecf8cd)
- grinder: pin that a positive CPU cap stays a cap (ebb8a2a)
- grinder: pin that the knob defaults and the class defaults agree (d005852)
- grinder: pin the per-container CPU cap and its wiring (6b159bf)
- grinder: pin the per-container memory cap and both caps' wiring (1fc9720)
- grinder: pin the pollable fallback-list properties document (47f9917)
- grinder: pin the shared window positively and against the real cap (2a90aa0)
- grinder: pin the shutdown invariant, its wiring and its 15s window (25c0c2c)
- grinder: pin what stopping the service must do to workers and containers (312745b)
- grinder: pin which uid:gid a container runs as (2964419)
🚀 Features
- grinder: express the container CPU cap in cores, against a stated period (00b5e77)
- grinder: make the per-container CPU cap configurable (65c921c)
- grinder: make the per-container memory cap configurable, with its warning (61fed6a)
- grinder: serve the fallback list as pollable properties at /as-properties (6be42c4)
- grinder: stop containers and workers gracefully, then kill them (25541a8)
🛠 Fixes
- ci: drop the gitlab.com release mirror, and stop curl hiding why (3b29a57)
- clientside: a crash cannot outrank another loader's clean boot (e4ea0b8)
- clientside: don't log "re-checking 0 other version(s)" (3400ff4)
- clientside: keep the file when CurseForge aborts the navigation (9df60fc)
- clientside: keep the reported verdict's own boot console (f036bf4)
- clientside: re-check a crash against the mod's other versions (7daca76)
- grinder: decide "uncapped" from the request, not from the arithmetic (11dfba6)
- grinder: diagnose a failed install from the whole console (8ec7440)
- grinder: make Ctrl-C stop a one-shot run, and share one 15s window (c7cc767)
- grinder: make the shared shutdown window real above eight containers (f7b0302)
- grinder: publish the worker list before starting the workers (6042833)
- grinder: report the CPU cap the way the operator set it (63cfd46)
- grinder: run containers as the owner of the pack they mount (de20741)
- grinder: stop two silent corruptions found by audit iteration 17 (3b4dc45)
VirusTotal
ServerPackCreator-9.0.0-alpha.7.jar- https://www.virustotal.com/gui/file-analysis/NzBlMjVjN2U4NzRiNWJlNmM2MWIwYTkwNWRlZTg3YjA6MTc4NzUwNjg3NQ==serverpackcreator-api-9.0.0-alpha.7-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZjQzNDM2ZDZiZWMzMjEyOTBmNmFmMjI4YWQ2MDI2MDQ6MTc4NzUwNjg3Ng==serverpackcreator-api-9.0.0-alpha.7-sources.jar- https://www.virustotal.com/gui/file-analysis/YTYzNWIyNDljYmZiNDM2NzdkZjFlNjYyNzdhMDNmNDU6MTc4NzUwNjg3OA==serverpackcreator-api-9.0.0-alpha.7.jar- https://www.virustotal.com/gui/file-analysis/MDE0NzZlNDFjZmFmMzAwMTEyMzg3MjBlZTY2ODE5NTU6MTc4NzUwNjg4MQ==serverpackcreator-app-9.0.0-alpha.7-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ODY5NzZjMTNiZmZkNjEyNWU3ZGM5NzhjMDU5ZjMyOGM6MTc4NzUwNjg4Mw==serverpackcreator-plugin-example-9.0.0-alpha.7.jar- https://www.virustotal.com/gui/file-analysis/MWQ5YjdiZmRhNjc5NDA0Y2VjYTVjMTQ0NzFmZjYwNjE6MTc4NzUwNjg4Mw==
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
6 downloads
-
9.0.0-alpha.6
Pre-releaseSome checks failedGenerate Release / semantic-release (push) Has been skippedDocker Test / build image (push) Successful in 15m29sBuild Release / Preparations (push) Successful in 14sDocumentation / Help image (push) Successful in 2m48sDocumentation / Writerside webhelp (push) Successful in 1m20sTest / build (push) Successful in 13m25sQodana / notify (push) Successful in 7sQodana / scan (push) Successful in 12m22sBuild Release / Docker images (push) Successful in 12m33sBuild Release / JARs, media and checksums (push) Successful in 27m34sBuild Release / Forgejo release (push) Successful in 2m54sBuild Release / VirusTotal scan (push) Successful in 2m55sBuild Release / Publish Maven (push) Successful in 6m38sBuild Release / Mirror release outward (push) Failing after 3m1sreleased this
2026-08-23 10:53:24 +02:00 | -487 commits to main since this release⚠ BREAKING CHANGES
- modscanning: remove the deprecated JsonBasedScanner
✂️ Refactor
- adopt the Kotlin idioms Qodana flagged (d37fc61)
- collapse the redundant conditionals Qodana flagged (4e16694)
- use multi-dollar string literals for dollar-heavy patterns (98942b1), closes #106
- api: compile the Forge annotation-scanner's regexes once (10a5811)
- api: extract how a timeout is applied into URL.timedConnection (555e9c7)
- api: extract manifest refreshing into ManifestUpdater (832bf43)
- api: hoist the per-file path resolution out of the gatherer's walk (0e97be4)
- api: index the Quilt scan by jar instead of searching it per entry (fca71d3)
- api: inject PathsConfig's working directory (3c068ce)
- api: make ModpackZipInspector's archive-opening injectable (8e0c840)
- api: make the launcher-manifest candidates askable (765e1d5)
- api: narrow ManifestUpdater to internal, and correct the timeout landmine (342e630)
- app: extract the upload duplicate-check from saveUploadedFile (aa763be)
- app: move the check-timer's server probe and pack-name read behind the view model (d6be4b5)
- app: put the migration's database access behind MigrationStore (5afd12c)
- app: split the suggestion parse out of allSuggestions (dd4c217)
- grinder: drop the bind guards' !! and over-tight exception type (ad7aff5)
- grinder: extract the Preferences-node claim from main() (7cd43b5)
- grinder: extract the report URL from main() (e04c02e)
- modscanning: extract the scanner contract and share the dispatch (d04a62a)
- modscanning: remove the deprecated JsonBasedScanner (d132522)
- web: extract the config-location composition from start() (18f25c6)
📔 Docs
- add a CI secrets reference for the Forgejo workflows (5eeb4a7)
- add BUILD.md, a contributor-facing map of the build (fd8d674)
- add Kent Beck's ordering mantra to the conventions (52a192c)
- answer the Docker/Mongo investigation's open question (21bab7f)
- audit iteration 12 — the systemd home-resolution branch, and its resolutions (3e873af)
- audit iteration 13 — the report bind-address branch, and its resolutions (1db4b60)
- audit iteration 15 — third pass, auditing the first two passes' fixes (8ffc8bf)
- audit iteration 16 — the deployment script and unit (03524c2)
- audit the build-docs branch (fa3cdd1)
- audit the context/documentation commits (iteration 10) (08728c2)
- audit the coroutines/catalog branch, fourth pass (9560ec0)
- audit the parallelMap/coroutines branch, post-remediation pass (b33da60)
- audit the post-migration commits (iteration 8) (3db2fcc)
- audit the readme-refresh and jpa-relics branches (c97ac45)
- audit the remediation (iteration 9) (47bfaf0)
- audit the security-manager branch, second pass (141dc20)
- backlog the CLAUDE.md trim, deferred behind the open merges (3256fef)
- bring root CLAUDE.md back under the large-memory floor (5f7298b), closes #1 #2
- carry iteration 4's guards into the refactor-state table (35bcbdb)
- carry iteration 6's guards into the refactor-state table (34331ad)
- cite commit subjects in the audit report too, and record iteration 4 (f971438)
- cite commit subjects instead of hashes, and correct the stale timeout landmine (2052180)
- clear B30/B31/B32 from the backlog and record them (d37be2d)
- close L3 in the audit after fixing it (8f3a51f)
- close out audit findings H-1 and M-3 (1f7aef2)
- close out the audit findings (96b802a)
- Consolidate the two audit files into claude-docs/REFACTOR-AUDIT.md (eda82e2)
- correct the id types in the published API spec (8796eaa)
- correct the last copy of the clientside-workflow miscount (f9c9d88)
- correct the marker rule — B35 was tried and does not work (0138f87)
- correct the published run-configuration API shape (f391518)
- correct two CLAUDE.md claims that outlived the backlog items behind them (6f7e95c)
- load the build and CI landmines only when they apply (8dd6af0)
- mark the lazy-loading saving as unverified, because it is (6c94565), closes claude-code#16299 #16299 #22170 #16299
- point BUILD.md at where CI lives and what it needs (882f967)
- record iteration 16's resolutions, and the JVM trap in the README (845fb63)
- record M-2 as fixed and repair a stray edit in the audit (d56bb4e)
- record that URI query parameters reach the driver again (a7cf04a)
- record the build layout after the simplification (24e00c5)
- record the catalog, [plugins] and Kotlin-unification work (57ba3f2)
- record the equivalence audit, its method, and the two findings it surfaced (3e70bb4)
- record the generation-throughput work, including the corrected estimates (53f3e12)
- record the grinder's report bind address in the status table (7033c23)
- record the GUI typing-path work (613b9ec)
- record the index-creation landmine and iteration 5 (2955212)
- record the network/startup work and backlog its follow-ups (aea1ea5)
- record the parallelMap fix, the coroutines floor and the BOM landmine (1cc6c4b)
- record the Qodana moderate cleanup and the two new pins (d280474)
- record the render-vs-prop test rule, and why the tooltips stay untested (b0ee703)
- record the systemd home-resolution trap and the ordering it depends on (bb6545b)
- record the two API-shape changes the generation branch left unrecorded (17a621e)
- record the web query-shape and DBRef-flattening work (e484a28)
- record what actually blocks the configuration cache (5fc3ca3)
- regenerate the API spec for the merged entities, and correct the suite counts (f158362)
- regenerate the OpenAPI spec from the controllers (ef13d48)
- stop CI-SECRETS.md pinning an install4j version it does not own (9832ace)
- the paths: scoping works — verified, and the earlier test was the wrong one (fb96ea3), closes #16299 #22170
- api: make the SKIP_JAVA_CHECK read intentional and guarded (c0b1457)
- app: re-verify the Mongo URI landmine at the versions now resolved (e3289e3)
- ci: record the release pipeline's two silent killers and the alpha-tag repair (7780da5)
- deprecation: suppress the intentional 6.0.0 deprecation warnings (9f92e8a)
- modscanning: record the scan-log-level rules (4f67393)
- modscanning: record the shared dispatch and correct the versioning-scheme survey (d76e2ed)
- readme: refresh stale content (d1ece9b)
- updater: record the pre-release ordering fix (486976e)
📦 Other
- Change logging to suggest report to author and include exception in log (6026f36)
- ignore Claude Code's per-developer files (f32c820)
- Please Please Please test your server packs before you release them (d858b8f)
- Refactor audit thanks to Claude (bd62619)
- Regenerate the license agreement for install4j-runtime 13.1 (1c90465)
- Update-To-Date license agreement (2611aed)
- web: drop the JPA/H2/JDBC relics from the Spring properties (24390e3)
🦊 CI/CD
- add a [plugins] catalog section and alias it from the build scripts (a8f1588)
- align springGradle with springBoot at 4.1.0 (f4dec99)
- Bump install4j to 13 (2c8de2c)
- bump Kover to 0.9.9 (96cb684)
- bump the Kotlin compiler to 2.4.10 (f0bf003)
- bump third-party library versions in the catalog (e55ddfe)
- collapse the four Kotlin entries onto one version ref (2be03f8)
- consume plugin markers in buildSrc instead of implementation artifacts (6325735)
- declare repositories once, in settings.gradle.kts (260f6f0)
- drop the orphaned io.spring.dependency-management plugin (66c77c0)
- let Gradle provision the JDK for the modules, not just for buildSrc (efcfbc8)
- move library versions into the version catalog (010e2f3)
- move the version catalog to gradle/libs.versions.toml (3e4afb9)
- remove cross-project configuration from the root build (689e4dc)
- remove duplicated and dead build logic (7511673)
- remove script-object captures from task actions (0c3da90)
- replace plugin-example's configuration-time copies with a Copy task (2c48f22)
- replace the configuration-time copies with real Copy tasks (2eccd20)
- route nekodetector and the Boot BOM through the catalog (b4e6fe9)
- scope publishing and signing to the api module (5992f57)
- upgrade Gradle to 9.7.1 (2f6894a)
- use lazy task references everywhere (45bce07)
- fix the credentials and references the migration got wrong (d894362)
- fix the ordering and re-run defects the first release would have hit (dfd4352)
- make the Docker diagnostic name its runner, and record what B26-B29 still need (e295ee0)
- move CI/CD to Forgejo, and retire GitLab CI (832eb46), closes forgejo#9203
- stop a release publishing its prereleases' changelogs, and fail loudly on upload errors (d00d094)
🧪 Tests
- make three guards that passed for the wrong reason actually bite (d3b20a0)
- api: pin hasteBinPreChecks before it stops reading whole files (522ab1e)
- api: pin home resolution against an unwritable working directory (ada7476)
- api: pin how often a modpack archive's central directory is read (e79f0ee)
- api: pin that a fresh install's fallback database-URI is usable (594cf5a)
- api: pin that an unknown Java version drops the security-manager flag (0ff2784)
- api: pin that an unreachable host leaves the present manifest intact (a189022)
- api: pin that HTTP calls give up instead of hanging forever (13a4b97)
- api: pin that parallelMap neither leaks a thread nor serialises (e55ba89)
- api: pin that the fallback-list refresh gives up instead of hanging (8ba6484)
- api: pin that the regex mod-lists are not shared between reads (40b0934)
- api: pin that the writability probe cannot be defeated by a name collision (af939d0)
- api: pin the cost of the clientside-exclusion loop (ac50171)
- api: pin the Java-resolve and fail-safe guard in all three templates (63a0860)
- api: pin what a manifest check costs (7dedca7)
- app: assert the components that only work if Spring created them (a9ddf98)
- app: characterize the EventService and RunConfigurationService store loops (d603378)
- app: characterize VersionChecker's pre-release comparison (ec79084)
- app: cover the migration runner's safety decisions (f021610)
- app: pin how often the check-timer consults the network and the disk (6537259)
- app: pin that a duplicate hash cannot break the upload check (7965520)
- app: pin that an upload's duplicate-check does not scan the collection (57090e1)
- app: pin that index creation is never a condition of starting up (ff83e6d)
- app: pin that the autocomplete list is parsed once, not per keystroke (1e9c748)
- app: pin that the database-URI key is one Spring Boot still reads (a2cdb9e)
- app: pin that the declared upload-hash index is actually created (3a7efd6)
- app: pin that the stats endpoint counts instead of scanning (0e0fc76)
- app: pin that the update check gives up instead of hanging (b58f866)
- app: pin the 9.0.0 migration for the renamed database property (4a84834)
- app: pin the migrated collection's name against the mapping it mirrors (c7e9a40)
- app: pin the two VersionChecker pre-release comparison defects (866c139)
- app: read the shipped application.properties, not the test copy that shadows it (8ad9f2f)
- frontend: assert the rendered mod-lists, not the props they came from (15b7754)
- grinder: bound the ordering guard to main's own body (b4f5c4e)
- grinder: pin that an already-bracketed IPv6 bind is not bracketed twice (badcc93)
- grinder: pin that the SPC environment is claimed before the first log statement (4624a57)
- grinder: pin that the unit tells the operator how to provide Java (68046d4)
- grinder: pin the logged report URL for wildcard and IPv6 binds (041d3f9)
- grinder: pin the report's bind address and its wiring (7b8e762)
- grinder: pin the systemd unit against the variables the service reads (c618340)
- modscanning: pin Forge scanner selection across both Minecraft schemes (f8cb89b)
- modscanning: pin that a Forge mod without dependencies keeps its id (b0e52a3)
- modscanning: pin the shared scanner dispatch directly (9a37368)
- web: pin the eight-location Spring config chain (d321722)
- web: replace WebServiceTest with a real application-context test (c8b5512)
🚀 Features
- api: add configurable network timeouts (8af3540)
- api: offer an ETag so the Forge manifest can answer 304 too (71c83c1)
- app: add an indexed findBySha256 to the modpack repository (26f342e)
- app: report the renamed database property when upgrading to 9.0.0 (2f91f5f)
- build: cross-package the aarch64 AppImage, so it needs no arm runner (ee766bb)
- ci: expire test.yml's artifacts instead of keeping them for 90 days (5b32620)
- ci: link the Qodana report artifact from Discord, not the run page (1cd2ac2)
- ci: put the report's expiry in the Discord message as a Discord timestamp (420a46b)
- grinder: make the report's bind address configurable (f91cedf)
- grinder: ship an example systemd unit and an installer (f9a0494)
🛠 Fixes
- If no (Neo)Forge or Minecraft dependency is declared, assume sideness server (7abd7c8)
- api: bound the fallback-list refresh (733db7c)
- api: halve startup requests and skip unchanged manifests (5f92b63)
- api: hand out a fresh regex mod-list per read (9b00946)
- api: make the fallback database-URI a URI the driver accepts (add8982)
- api: measure a HasteBin candidate without materialising it (b5add6c)
- api: never resolve the home directory to a place SPC cannot write (b470496)
- api: probe writability with a name nothing else can hold (79c34df)
- api: read a modpack archive once per inspection (cd75f24)
- api: refresh the version manifests in the background, not during construction (211dc83)
- api: resolve Java after installing it, and fail safe when it is unknown (5f4bce2)
- api: route every outbound call through one timed opener (5625223)
- api: route the HasteBin POST through the shared opener too (e1a593e)
- api: sanitise a network timeout once per assignment (9ef4191)
- api: stop a bad regex aborting the mod-list, and hoist the loop invariants (f77a5c6)
- api: stop parallelMap leaking a thread per call, and make it parallel (ae18f56)
- api: write the database-URI under the key Spring Boot 4 actually reads (f509eed)
- app: bound the update check's requests (27f544b)
- app: cache the autocomplete parse, and stop reinstalling the LAF per keystroke (a7b3ff9)
- app: count the stats totals instead of scanning three collections (13467fc)
- app: create the declared indexes after startup, not during it (93cee51)
- app: create the indexes the web module declares (327e458)
- app: embed the run-configuration mod lists, and migrate what is stored (918ca03)
- app: key the installer-probe memo on a Triple instead of NUL-delimited text (bc6c78c)
- app: look an upload's hash up by index instead of scanning every modpack (4f82e4b)
- app: stop the check-timer re-probing the network and re-parsing the manifest (e4ec252)
- app: tolerate duplicate hashes in the upload duplicate-check (1b287ab)
- build: declare mockk explicitly in -app so it matches -api (e732079)
- build: declare the Java compilations on dokka's HTML publication too (dbcb80c)
- build: import Boot's BOM as a platform so the catalog wins (3ab1abe)
- build: keep the install4j plugin off buildSrc's compile classpath (6969313)
- build: replace the Gradle APIs 9.7 deprecates and 10 removes (8a795b4)
- ci: drop the Qodana Cloud token the project cannot have (d4af07b)
- ci: keep the Forgejo token out of release-generate's remote URL (20cd6ed)
- ci: make the sibling-container steps work under docker-in-docker (d21caeb)
- ci: pin semantic-release's plugin majors so a preset bump can't break the release (97f487e)
- ci: rename the Forgejo credentials off the reserved FORGEJO_ prefix (710e8ea)
- ci: scope the Forgejo credential to the checkout, not the runner (5039fd7)
- ci: stop running jobs inside tool containers, and drop the inert permissions (5bc0434)
- ci: use Forgejo's patched artifact actions, which do not refuse a non-GitHub host (8830248)
- docs: repair the broken KDoc links and drop a redundant inner modifier (b5dec4d)
- grinder: close every finding from audit iteration 16 (70a10fd)
- grinder: don't bracket an already-bracketed IPv6 bind, and stop --help truncating (6d4a86c)
- grinder: harden the installer, and record audit iteration 14 (f158699)
- grinder: make the logged report URL openable for wildcard and IPv6 binds (43249a6)
- grinder: pin SPC's home to the daemon's base before anything logs (d4eec4b)
- modscanning: log a jar with no descriptor at debug, keep real failures loud (30bcdc6)
- modscanning: select the Forge scanner from the whole Minecraft version (4dbf653)
- modscanning: treat an absent dependencies block as no dependencies (46a8a7b)
- updater: order pre-releases by channel, and pick the latest by version (f6df209)
VirusTotal
ServerPackCreator-9.0.0-alpha.6.jar- https://www.virustotal.com/gui/file-analysis/NmI1ZDczZWM4MjAyNTliZTZmODJiMTk5Mzc1YTcyN2Q6MTc4NzQ3OTAxMg==serverpackcreator-api-9.0.0-alpha.6-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZjQzNDM2ZDZiZWMzMjEyOTBmNmFmMjI4YWQ2MDI2MDQ6MTc4NzQ3OTAxMg==serverpackcreator-api-9.0.0-alpha.6-sources.jar- https://www.virustotal.com/gui/file-analysis/ZTNmYTZiZTVkZDRjZmZlYWYxNTg3OWE0YzU5NTQ3OWU6MTc4NzQ3OTAxNA==serverpackcreator-api-9.0.0-alpha.6.jar- https://www.virustotal.com/gui/file-analysis/NTY5NjliNGY2OGE5NmEzNTM4MWNjNWYyMGE4ZmQxN2Y6MTc4NzQ3OTAxOA==serverpackcreator-app-9.0.0-alpha.6-javadoc.jar- https://www.virustotal.com/gui/file-analysis/YjgyYjc3MTMyMzJmNzBkYTI1MzllZjZhMzgxODMyMTg6MTc4NzQ3OTAyMA==serverpackcreator-plugin-example-9.0.0-alpha.6.jar- https://www.virustotal.com/gui/file-analysis/NzJhOTE3OTBlNGMwN2Y3YzQ2ZGVlYzE2MGI1NTEwYmM6MTc4NzQ3OTAyMQ==
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
3 downloads
-
Pre-Release 9.0.0-alpha.5
Pre-releaseSome checks failedclientside-report-reusable.yml / RELEASE: 9.0.0-alpha.5 (push) Failing after 0sCreate GitHub Pre-Release after GitLab tag mirror / Preparations (push) Successful in 13sCreate GitHub Pre-Release after GitLab tag mirror / JAR and media (push) Failing after 11sCreate GitHub Pre-Release after GitLab tag mirror / PreRelease (push) Failing after 7sCreate GitHub Pre-Release after GitLab tag mirror / News on Discord (push) Has been skippedTest / build (push) Failing after 19m9sreleased this
2026-08-15 00:16:10 +02:00 | -223 commits to main since this release9.0.0-alpha.5 (2026-08-14)
✂️ Refactor
- Remove dead code after modscan-rewrite (0df7b28)
- api: build ScannedMod complete instead of assigning into it (7a37426)
- api: compare scanned mods by jar, not by filename (8d0022c)
- api: read the exclusion filter once instead of three times (198ff2b)
- api: remove the unreachable copy-loop from the Quilt arm (9459b0c)
- api: rename ScanResult.kt to ScannedMod.kt (4793620)
- clientside: rename Sideness to DeclaredSupport (90fed95)
📔 Docs
- close out the audit after the tidy-up branch (6a88369)
- correct the stale app and web-frontend test counts (13d63a9)
- move the dated narrative history out of CLAUDE.md into REFACTOR-LOG.md (0e31fd2), closes gitlab-runner#27496
- record the I-6 fix and correct the suite count (39a285c)
- record the modscanning hardening and correct the modloader-fallback claim (1f93755)
- update the refactor audit to reflect the remediation (51a8db3)
- api: correct ReadmeExamplesTest's stale and invented references (3fabed7)
- api: document the scanned-mod types (d6b86ee)
- clientside: record why DeclaredSupport and Sideness stay separate (6fc8c26)
- grinder: add a clone-to-results quickstart (385532b)
📦 Other
- Add clientside-only mods to the list. Thanks to @ModernGamingWorld @szszabi2002 @Joly0 for the reports! (5a03123)
- api: drop the unused SupportedModloaders.quilt import (d9a9778)
🦊 CI/CD
- run the frontend Vitest suite as part of
check(33a6361) - deps: bump org.jetbrains.kotlin:kotlin-test-junit5 (f4e4e20)
- deps: bump org.junit.platform:junit-platform-launcher (3b17c1f)
🧪 Tests
- Use correct syntax to test contents (d185fd7)
- api: pin auto-exclusion and Quilt de-duplication in ModListCompiler (7279962)
- api: pin dependency extraction and Forge platform-side inference (5eb1edd)
- api: pin that an unrecognised modloader still yields every mod - RED (b8f809f)
- api: pin that the dependency rescue reaches clientside mods - RED (d8dfeb4)
- api: pin the Quilt arm against a fabric-only jar (581ca46)
- api: pin the SERVER default for a descriptor without an environment (793b8fc)
- api: pin the unreadable-jar sideness and modID fallback (010db69)
🛠 Fixes
- Aggregate Quilt-scan results to prevent double-entries (35cb727)
- Prevent duplicate entries (7004f3c)
- Prevent the modID being the same by acquiring it from the mod-file (2ec5ff2)
- Quilt mod with no env is not treated as SERVER (bf226c2)
- Vastly improve automated modscanning to catch and process sideness more reliably, as well as taking care of dependencies (0a12d41)
- api: include every mod when the modloader is unrecognised (2eafe1b)
- api: let the dependency rescue reach clientside mods (35c5787)
- api: log the Quilt entry being replaced, not its replacement (b855873)
About Pre-Releases
Do not release or publish a server pack generated using a pre-release of ServerPackCreator to your users.
If you do, and it turns out that your server pack doesn't work because of a bug in ServerPackCreator, that's on you for using a pre-release.When using pre-release installers, make sure to uninstall the previous pre-release first. Otherwise, the installers
own version checks may trigger an error out of my control. After uninstalling, install the newly downloaded one and
you're good to go.Only use the installers if you are versed in system-administration, manually editing and removing services, editing registries,
so on and so forth.Alphas
Alphas are feature-incomplete and very likely to have bugs. Consider them broken by default. Use at your own risk!
Betas
Betas are feature-complete and probably have bugs. Additional features may be added during the beta-phase of any given release, though.
If you are updating from version 5 or older and used the installers, then make sure to uninstall any previous version(s)
before using the installers for versions 6 and newer.Additional Installer-Notes
It is recommended to have administration-privileges when using the Windows and macOS installers.
I am not a member of the Apple Developer Program and won't pay for codesign-certificates, therefor installers are unsigned.
Running a given installer may produce warnings depending on what OS you are using. You may choose to install it anyway, please be aware though that doing so is, in general, not a safe practice. For ServerPackCreator, though, it is unfortunately the only way to run the installer.macOS DMG
MacOS will complain about potential security risks and refuse to install and run ServerPackCreator. To circumvent this, please see the official guides depending on your version of macOS: Ventura, Monterey or newer.
Windows EXE
Hit "More information" if the Windows SmartScreen-message pops up. Afterward, a button will appear which will let you run the installer anyway.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
5 downloads
-
Pre-Release 9.0.0-alpha.4
Pre-releaseSome checks failedclientside-report-reusable.yml / RELEASE: 9.0.0-alpha.4 (push) Failing after 0sCreate GitHub Pre-Release after GitLab tag mirror / Preparations (push) Successful in 23sCreate GitHub Pre-Release after GitLab tag mirror / JAR and media (push) Failing after 9sCreate GitHub Pre-Release after GitLab tag mirror / PreRelease (push) Failing after 6sCreate GitHub Pre-Release after GitLab tag mirror / News on Discord (push) Has been skippedTest / build (push) Failing after 19m20sreleased this
2026-08-04 22:14:03 +02:00 | -179 commits to main since this release9.0.0-alpha.4 (2026-08-04)
✂️ Refactor
- Remove unused and unnecessary imports (cfd0362)
🛠 Fixes
- Correctly check range (7e1f1cb)
About Pre-Releases
Do not release or publish a server pack generated using a pre-release of ServerPackCreator to your users.
If you do, and it turns out that your server pack doesn't work because of a bug in ServerPackCreator, that's on you for using a pre-release.When using pre-release installers, make sure to uninstall the previous pre-release first. Otherwise, the installers
own version checks may trigger an error out of my control. After uninstalling, install the newly downloaded one and
you're good to go.Only use the installers if you are versed in system-administration, manually editing and removing services, editing registries,
so on and so forth.Alphas
Alphas are feature-incomplete and very likely to have bugs. Consider them broken by default. Use at your own risk!
Betas
Betas are feature-complete and probably have bugs. Additional features may be added during the beta-phase of any given release, though.
If you are updating from version 5 or older and used the installers, then make sure to uninstall any previous version(s)
before using the installers for versions 6 and newer.Additional Installer-Notes
It is recommended to have administration-privileges when using the Windows and macOS installers.
I am not a member of the Apple Developer Program and won't pay for codesign-certificates, therefor installers are unsigned.
Running a given installer may produce warnings depending on what OS you are using. You may choose to install it anyway, please be aware though that doing so is, in general, not a safe practice. For ServerPackCreator, though, it is unfortunately the only way to run the installer.macOS DMG
MacOS will complain about potential security risks and refuse to install and run ServerPackCreator. To circumvent this, please see the official guides depending on your version of macOS: Ventura, Monterey or newer.
Windows EXE
Hit "More information" if the Windows SmartScreen-message pops up. Afterward, a button will appear which will let you run the installer anyway.
Downloads
-
Source code (ZIP)
2 downloads
-
Source code (TAR.GZ)
2 downloads
-
Pre-Release 9.0.0-alpha.3
Pre-releaseSome checks failedclientside-report-reusable.yml / RELEASE: 9.0.0-alpha.3 (push) Failing after 0sCreate GitHub Pre-Release after GitLab tag mirror / Preparations (push) Successful in 22sTest / build (push) Failing after 19m36sCreate GitHub Pre-Release after GitLab tag mirror / JAR and media (push) Failing after 10sCreate GitHub Pre-Release after GitLab tag mirror / PreRelease (push) Failing after 7sCreate GitHub Pre-Release after GitLab tag mirror / News on Discord (push) Has been skippedreleased this
2026-08-04 20:57:30 +02:00 | -175 commits to main since this release9.0.0-alpha.3 (2026-08-04)
✂️ Refactor
- Optimize imports (416a809)
- Qodana findings. Removes deprecated usages, simplifies code, evens out formatting. (6b1e155)
- Use kotlin.time.Clock instead (b8a846e)
- app: extract WebService's Spring-argument composition (d8df621)
👀 Reverts
- Reintroduce inner to allow test access (d40d9cc)
📔 Docs
- investigation plan for the docker MongoDB/localhost report (dc9e97c)
- record the CI/dind work, its audit, and the four follow-ups it left (e3a720c)
- record the Spring Boot 4 MongoDB finding and re-rank the investigation (3077923)
🧪 Tests
- app: pin that WebService keeps every commandline argument - RED (73f7cd3)
- docker: pin the s6 init script's overrides.properties output - RED (82a8486)
🛠 Fixes
- app: stop discarding the last commandline argument (c1ce997)
- ci: guard the whole cached JBR tree, and classify why the probe failed (afadcb9)
- docker: make docker-compose-dev.yml a valid compose project again (4222d48)
- docker: make SPC_LOG_LEVEL actually do something (391ccb0)
- docker: point SPC at the database and user that init-mongo.js actually creates (681b6e2)
- docker: stop wrapping the zip-exclude overrides in literal braces (801407b)
- docker: stop writing an unparseable database-URI when auth is not configured (4ca0f2c)
About Pre-Releases
Do not release or publish a server pack generated using a pre-release of ServerPackCreator to your users.
If you do, and it turns out that your server pack doesn't work because of a bug in ServerPackCreator, that's on you for using a pre-release.When using pre-release installers, make sure to uninstall the previous pre-release first. Otherwise, the installers
own version checks may trigger an error out of my control. After uninstalling, install the newly downloaded one and
you're good to go.Only use the installers if you are versed in system-administration, manually editing and removing services, editing registries,
so on and so forth.Alphas
Alphas are feature-incomplete and very likely to have bugs. Consider them broken by default. Use at your own risk!
Betas
Betas are feature-complete and probably have bugs. Additional features may be added during the beta-phase of any given release, though.
If you are updating from version 5 or older and used the installers, then make sure to uninstall any previous version(s)
before using the installers for versions 6 and newer.Additional Installer-Notes
It is recommended to have administration-privileges when using the Windows and macOS installers.
I am not a member of the Apple Developer Program and won't pay for codesign-certificates, therefor installers are unsigned.
Running a given installer may produce warnings depending on what OS you are using. You may choose to install it anyway, please be aware though that doing so is, in general, not a safe practice. For ServerPackCreator, though, it is unfortunately the only way to run the installer.macOS DMG
MacOS will complain about potential security risks and refuse to install and run ServerPackCreator. To circumvent this, please see the official guides depending on your version of macOS: Ventura, Monterey or newer.
Windows EXE
Hit "More information" if the Windows SmartScreen-message pops up. Afterward, a button will appear which will let you run the installer anyway.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
1 download
-
Pre-Release 9.0.0-alpha.2
Pre-releaseSome checks failedclientside-report-reusable.yml / RELEASE: 9.0.0-alpha.2 (push) Failing after 0sCreate GitHub Pre-Release after GitLab tag mirror / Preparations (push) Successful in 12sTest / build (push) Failing after 19m59sCreate GitHub Pre-Release after GitLab tag mirror / JAR and media (push) Failing after 29sCreate GitHub Pre-Release after GitLab tag mirror / PreRelease (push) Failing after 8sCreate GitHub Pre-Release after GitLab tag mirror / News on Discord (push) Has been skippedreleased this
2026-08-04 09:43:11 +02:00 | -154 commits to main since this release9.0.0-alpha.2 (2026-08-04)
✂️ Refactor
- Print debug dependency info via override toString (102be3e)
- ci: scope the dind service to the jobs that use Docker (358675f)
🦊 CI/CD
- log which Docker endpoint the Docker jobs actually use (f3a60df)
🛠 Fixes
- Hopefully fix NeoForge EdgeCase preventing mod exclusions. Thanks to @ModernGamingWorld for the report and help. (255af9e)
- ci: restore the executable bit on the cached Qodana JBR (fd81712), closes gitlab-runner#27496 #1782
About Pre-Releases
Do not release or publish a server pack generated using a pre-release of ServerPackCreator to your users.
If you do, and it turns out that your server pack doesn't work because of a bug in ServerPackCreator, that's on you for using a pre-release.When using pre-release installers, make sure to uninstall the previous pre-release first. Otherwise, the installers
own version checks may trigger an error out of my control. After uninstalling, install the newly downloaded one and
you're good to go.Only use the installers if you are versed in system-administration, manually editing and removing services, editing registries,
so on and so forth.Alphas
Alphas are feature-incomplete and very likely to have bugs. Consider them broken by default. Use at your own risk!
Betas
Betas are feature-complete and probably have bugs. Additional features may be added during the beta-phase of any given release, though.
If you are updating from version 5 or older and used the installers, then make sure to uninstall any previous version(s)
before using the installers for versions 6 and newer.Additional Installer-Notes
It is recommended to have administration-privileges when using the Windows and macOS installers.
I am not a member of the Apple Developer Program and won't pay for codesign-certificates, therefor installers are unsigned.
Running a given installer may produce warnings depending on what OS you are using. You may choose to install it anyway, please be aware though that doing so is, in general, not a safe practice. For ServerPackCreator, though, it is unfortunately the only way to run the installer.macOS DMG
MacOS will complain about potential security risks and refuse to install and run ServerPackCreator. To circumvent this, please see the official guides depending on your version of macOS: Ventura, Monterey or newer.
Windows EXE
Hit "More information" if the Windows SmartScreen-message pops up. Afterward, a button will appear which will let you run the installer anyway.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
Pre-Release 9.0.0-alpha.1
Pre-releaseSome checks failedclientside-report-reusable.yml / RELEASE: 9.0.0-alpha.1 (push) Failing after 0sCreate GitHub Pre-Release after GitLab tag mirror / Preparations (push) Successful in 11sTest / build (push) Failing after 20m1sCreate GitHub Pre-Release after GitLab tag mirror / JAR and media (push) Failing after 27sCreate GitHub Pre-Release after GitLab tag mirror / PreRelease (push) Failing after 10sCreate GitHub Pre-Release after GitLab tag mirror / News on Discord (push) Has been skippedreleased this
2026-08-02 16:18:49 +02:00 | -146 commits to main since this release9.0.0-alpha.1 (2026-08-02)
✂️ Refactor
- Extract clientside-mod verification engine into its own module (68d227b)
- Improve modscan result readability (657097d)
- Optimize imports (f443246)
- remove dead code found by Qodana (ea99d7e)
- Remove unnecessary non-null assertions (e777c4f)
- api: centralize versionmeta URLs & tag-names in VersionMetaConfig (ea95b43)
- api: de-duplicate chunked list printing; document ignored catches (0fa8a98)
- api: read the published constants through their owners (1af6f72)
- api: ship variables.txt as a template instead of a string literal (7815d59)
- app: address clientside-verify audit findings (L1, L2, M2) (425c835)
- app: drop the inert WritableDirectoryFilter (6168acc)
- app: route the stored home directory through one place (5f138ef)
- build,api: scope the properties helper and anchor the test's paths (8693ff3)
- clientside,grinder: extract the suspend-aware boot deadline (b6b778b)
- clientside: drop the !! in the crash re-check (6054115)
- clientside: drop unused logFile param from ServerRunner.run (c2ae091)
- clientside: split BootVerifier into staging + a ServerRunner seam (d0d257f)
- grinder,api: audit LOW cleanups — one PACK_MOUNT, no !!, no leaked state (56843ef)
- grinder: organize flat package into subsystem subpackages (3a9a4f5)
- grinder: put container cleanup on the ContainerEngine seam (a077651)
- gui: own app-lifetime dialog coroutines via component scopes (0b2341f)
- gui: own ConfigEditor coroutines via a component-scoped CoroutineScope (40e2aab)
- gui: own IconPreview and SuggestionProvider coroutines (ef109db)
- gui: own inclusions-editor coroutines via component-scoped scopes (1036f29)
- gui: own ScrollTextArea coroutines via a component-scoped CoroutineScope (5c0925d)
- gui: own TabbedConfigsTab coroutines via a component-scoped scope (1f80442)
- gui: own the server-pack generation coroutine in ControlPanel (a56314d)
- gui: own the settings/config check-timer coroutines (1a6c465)
✨ Milestone
- Claude Refactoring to adhere more to common standards, Sideness Detection Workflows and more! See merge request Griefed/ServerPackCreator!690 (ea459f6)
👀 Reverts
- clientside,grinder: drop LoaderSupportMemory — its premise was wrong (d8b6cb1)
📔 Docs
- add deferred-work plan for post-coverage cleanups (b14263d)
- align the markdown tables in the clientside and grinder READMEs (2babcb4)
- backlog the wall-clock boot deadline and every TODO marker in the tree (1a952c4)
- close B1 and B10 (625ecdf)
- close B19 and record the ServerStarterJar install landmine (9f3c818)
- close B2, B6, B9 and B12; restore the entries B8's commit truncated (97386bb)
- close B3 and record the frontend harness landmines (4133639)
- close B7 (96e2be9)
- correct the grinder suite count after the shutdown-interrupt test (8e5b985)
- defer PR4 (detekt) — no stable detekt supports Kotlin 2.3 (452c782), closes #8865
- discard PR6 (Desktop adapter) — intentional plugin-facing API (ced059d)
- do not prescribe specific DNS resolvers in the log (2d9dfe6)
- drop B4 from the backlog (21f9d1e)
- drop the derivable build-system preamble from the module map (b530101)
- ELI5 Dokka package docs across all modules; wire plugin-example; suppress generated i18n (e676bb5)
- exempt reference-only test updates from the refactor-label rule (4767786)
- GitHub Actions workflow audit + remediation report (1ce1fff)
- mark deferred-work PR1 (MockK + network coverage) done (8a08a42)
- mark deferred-work PR2 (ignored-catch pass) done (ddfd4af)
- mark deferred-work PR3 (versionmeta config) done (e2e10f9)
- mark Phase 4c (frontend TypeScript migration) complete (b100209)
- mark Phase 4d (component test harness) done; Phase 4 complete (468654f)
- mark the fifth audit's findings remediated (1b94234)
- mark the fourth audit's findings remediated (d0dc86e)
- move Claude refactor/planning docs into claude-docs/ (f3161aa)
- pin-first for templates, manifests and version parsing; backlog B13-B18 (b28d131)
- reattach orphaned KDoc blocks to the units they describe (56baba3)
- record audit remediation; correct stale api test count (23207eb)
- record B22, the grinder writing config files into the repo root (5faa40e)
- record GUI structured-concurrency refactor (GlobalScope removal) (93ae567)
- record how build logic is verified, since tests cannot pin it here (fa89807)
- record Phase 4e (broadened frontend component coverage) (94def0c)
- record Phases 3-6 and close the audit's actionable findings (f1368b3)
- record the durable facts from this branch in the module contexts (db4b85d)
- record the Fabric fall-through, staging reclamation and the home-preference collision (0351f3c)
- record the Java 24 security-manager landmine and the cache-invalidation rule (99bebf7)
- record the killed/OOM classifier guard and the sweep sizing (47df808)
- record the matrix, drain, Quilt fix and audit remediation (2d448f2)
- record the Minecraft versioning-scheme rule; close B8 (64d2d70)
- record the plugin-visible behaviour change and the audit remediation (6be958e)
- record the Preferences-node fix, the home fallback it exposed, and the measurement caveat (e2dd33c)
- record the Qodana audit in CLAUDE.md and the refactor log (a10cb5c)
- record the two documentation conventions this audit surfaced (a0d6888)
- record the variables.txt contract change and two commit-discipline rules (70cfe7f)
- register serverpackcreator-grinder in root module map + refactor log (5013eaa)
- remove B11; the backlog is empty (240a6c8)
- repair KDoc references that pointed at nothing (61111ec)
- restructure CLAUDE.md into per-module context + REFACTOR-LOG (30ce3e8)
- table the template-path change as the compatibility policy requires (b960986)
- third audit of the unpushed develop range (102 commits) (fce7e61)
- withdraw audit finding L-C; record the inverse problem as B21 (b9777dd)
- api: add the developer guide, with a correct mod-scanning example (5499003)
- api: correct the ForgeLoader TODO — the finding was overstated (29bf111)
- api: document ApiProperties' fallbacks, build identity and preference access (54593f8)
- api: document intent of swallowed exceptions (ignored-catch pass) (e6470ff)
- api: document PackConfig's properties, accessors and defaults (781c858)
- api: document the scan results, manifest, stopwatch and generation defaults (2d83f5b)
- api: document the script-placeholder defaults, companions and remaining members (ba37a90)
- api: document the ServerPackConfigTab plugin extension point (5a47cc5)
- api: document the version-meta instances, path defaults and scanner matchers (c2b09f2)
- api: document VersionMeta's upstream manifests and ConfigurationHandler's matchers (7f83805)
- api: give the config-tab accessors the context their labels lacked (dbe908e)
- api: stop the mapping test minting a phantom TODO in IDEA (797ed40)
- api: TODO on ForgeLoader's unguarded manifest cut (99a99fd)
- app: document intent of swallowed exceptions (ignored-catch pass) (4bca416)
- app: record the settings dirty-check reload-after-save landmine (585ecb2)
- audit: extend the refactor audit to the full claude range (Phase 0 → HEAD) (503f779)
- audit: record audit findings + remediation for the Phase 4 branch (308dbb2)
- clientside: add the CLI usage guide (039f5ea)
- frontend: keep 4e's tables note with 4e (7bed581)
- grinder: add the service operator guide (f3b3e33)
- grinder: close B13 by running the template matrix, and record what it found (a09138a)
- grinder: correct which store method drives the daemon's skip check (553671a)
- grinder: describe the partitioned CurseForge crawl and its limits (85cc20b)
- grinder: document every declaration dokka reported as undocumented (f31da8f)
- grinder: document how to size the worker count (2acd41f)
- grinder: give logging and live status their own README section (31b4391)
- grinder: record e2e verification result + Java/image-JDK limitation (5ef37cd)
- grinder: record loader-install spike findings (LoaderCache snapshot design) (33e2915)
- grinder: record which matrix cells have actually been exercised (a16401b)
- grinder: refresh status + record current-MC e2e verification (908493d)
- refactor-log: record Phase 4b ( decoupling) and 4c (TS migration) (2aaa7a7)
📦 Other
- Add clientside mods. Thanks to @ModernGamingWorld (9577d7e)
- Add clientside mods. Thanks to @ModernGamingWorld @Xplodin @szszabi2002 (f45f412)
- Formatting (33cca96)
- normalize CLAUDE.md to LF line endings (7a72b43)
- normalize ScanResult.kt to LF line endings (8c2bf18)
- Regular doc updates (344a9cb)
- Update copyright year. Whoops. (7a344f3)
- Update manifests (89a2f49)
- Update manifests and license agreement (89305a8)
- api: refresh the shipped server-manifest snapshot for 16 releases (7ed6397)
- api: remove dead jNeedle code and unused Artemis fallback (89ad148)
🦊 CI/CD
- keep the batch start-script template on LF (8be2913)
- pin line endings with a .gitattributes (f4e7397)
- remove the Corepack workaround now that Node 24 does not need it (101e0fa)
- deps: Update NodeJS and npm versions (266f4f0)
- gradle: Add dependencies for requestes tasks as per gradle errors (75f1ce4)
- grinder: add spc-grinder-templates image (fish + pwsh) for template tests (c3e1956)
- harden and fix the existing GitHub Actions workflows (d66db45)
- SHA-pin remaining first-party actions/* and gradle/* actions (4f56742)
- clientside: allow manual dispatch of the verify (metadata) scan (801a183)
- clientside: extract shared report pipeline into a reusable workflow (b486e3d), closes actions/runner#1555
🧪 Tests
- cover the 1.21 line, LegacyFabric, and the .ps1 installer selection (1a48bc8)
- pin the operator docs against the code they describe (f4ef1e6)
- api: add MockK + offline coverage for network-bound branches (fba73e9)
- api: characterize MinecraftMeta.requiredJavaVersion against real metadata (c5bf447)
- api: characterize versionmeta manifest & installer URLs (f7787d8)
- api: compile-check the documented API examples (987a1d8)
- api: non-gated guard for the fish template fix; clear the CLEANUP suspicion (a4744a7)
- api: pin that a failed manifest download is not retried on every lookup (bde5d16)
- api: pin that shipped resources stay tracked and test homes stay ignored (c8a8f7e)
- api: pin that template paths follow a home directory changed at runtime (a758dae)
- api: pin that the published constants delegate to their owners (c59b113)
- api: pin that the shipped snapshot covers the releases it advertises (4eb556e)
- api: pin the Minecraft to loader mapping for Forge and the Fabric family (e9faf52)
- api: pin the Minecraft to NeoForge version mapping (5703b03)
- api: pin the suite's own configuration as machine-independent (cd07859)
- api: pin who installs Forge when SSJ cannot trap the installer's exit (203a325)
- api: raise config-check & server-pack-generation coverage (P1–P9) (9430390)
- clientside: characterize BootVerifier.prepareBootPack selection wiring (affdfd4)
- clientside: cover the extracted ServerRunner verdict seam (a652a93)
- clientside: pin classify's guard order as a whole (6ea9770)
- clientside: pin the boot budget against a host that sleeps mid-boot (3fe798f)
- frontend: characterize presentational nav/placeholder components (704e0f9)
- frontend: characterize SubmitModPackForm; regression-test the onRejected bug (87a7cc8)
- frontend: characterize the data cards (fetch-then-display) (4396ada)
- frontend: characterize the download pages (filename derivation) (feca50a)
- frontend: cover MainLayout's nav wiring and the About page's links (1c69fdc)
- grinder: full matrix results; default to 1 worker to stop [secure] failures (b5b2124)
- grinder: live-daemon integration test for DockerJavaContainerEngine (4c3ca92)
- grinder: pin an unknown Java requirement as distinct from an unbundled JDK (b00ba1e)
- grinder: pin that a failed install's console survives the next attempt (4c941c7)
- grinder: pin that the loader cache knows which templates produced an install (9a79782)
- grinder: pin the daemon's settings file to its own home, not the cwd (6b122bb)
- grinder: pin the live crawl assumptions behind GRINDER_LIVE_IT (331f349)
- grinder: pin verdict identity as the project, not its current slug (5c1a3ce)
- grinder: PowerShell covered by parse check — .ps1 cannot boot on Linux (e3952d4)
- grinder: script-template Docker matrix IT (bash/fish/pwsh) (2f2494c)
- gui: pin ComponentCoroutineScope; remediate audit finding M3 (1bdd15e)
🚀 Features
- Add fish-templates to support fish-scripts (bf26261)
- api: MinecraftMeta.requiredJavaVersion + ConfigEditorViewModel reuse (07e931a)
- app: automate clientside-mod request verification & acceptance (13d8c4f)
- clientside,grinder: reuse cached loader builds, guarded by a crash re-check (defbded)
- clientside: BootVerifier packPostProcessor hook (the cache-overlay seam) (3236fe7)
- grinder,clientside: live boot logs, a /status endpoint, per-candidate log lines (a44e4a7)
- grinder: add categoryId as the third CurseForge partition axis (80c3554)
- grinder: add the LoaderCache pre-bake (the --network none enabler) (b00077b)
- grinder: bound Minecraft selection to image-supported Java (81e5f25)
- grinder: bound the loader cache by last-use time (8e5f31d)
- grinder: bundle Temurin 25 so the current Minecraft release boots (7418a12)
- grinder: continuous fire-and-forget mode with stale re-verification (c3aef47)
- grinder: crawl CurseForge in partitions to get past its 10 000-result cap (281fbf4)
- grinder: crawl the whole catalog continuously instead of the top N (76d9d3a)
- grinder: CurseForge candidate source behind a CandidateSource seam (913e646)
- grinder: dedup verdicts by project identity instead of slug (826822d)
- grinder: dedup verdicts per platform, not per slug (a25c0e0)
- grinder: file-backed JsonVerdictStore so a grind survives restarts (410aa54)
- grinder: grind orchestration — Grinder, pool, verdict store, CSV export (14b88c2)
- grinder: Modrinth candidate source — popularity-ranked queue seed (82fe0b4)
- grinder: offset-based catalog paging in the candidate sources (45e7841)
- grinder: persisted crawl cursor and catalog crawler (2d5a834)
- grinder: real CandidateVerifier + runnable main (fire-and-forget entrypoint) (2a39359)
- grinder: real LoaderInstaller (boot-with-network -> snapshot into LoaderCache) (c34529d), closes #2
- grinder: reclaim per-attempt staging instead of accumulating it (f1de11b)
- grinder: record which templates produced a cached loader install (5aa12db)
- grinder: report grind outcomes and derive the inter-pass pause from them (94cf436)
- grinder: runtime image (loader-agnostic, multi-JDK) — build-verified (221bee0)
- grinder: scaffold the module with a container-backed ServerRunner (3acb548)
- grinder: self-contained web report — sortable table + CSV export (7130f06)
- grinder: step down from a loader build whose installer is missing upstream (91ac0e1)
- grinder: supply an installer JDK, and only where it is needed (2cd64ec)
- grinder: VerdictStore.newestVerification(slug) for freshness checks (3692074)
- grinder: warn when the Modrinth crawl nears its offset ceiling (5caa683)
🛠 Fixes
- Add fish-warning recommended by DavidBevi (a6ffd41)
- Correctly parse NeoForge to Minecraft version mappings (28a786b)
- Improve fabric availability check. Fix Quilt availability check. Fix Cleanup-routine. (93c9e80)
- stop .gitignore hiding the shipped server_files resources (8f1b3a7)
- api: boot Fabric from the launcher already on disk before asking the network (1a55797)
- api: choose Forge's launcher era by scheme, not by minor version alone (2a9a034)
- api: close the same version-scheme assumption in setupNeoForge (30f6cbd)
- api: correct checkForInvalidPathCharacters to reject any forbidden char (6622e01)
- api: derive the shipped template paths on access, not at construction (0dacd5a)
- api: do not persist a -D home override into the stored preference (aa2d27f)
- api: drop the security-manager flag on Java that refuses to start with it (c571e2d)
- api: fish start-template drops empty args (--no-empty) (2e16bf0)
- api: install Forge directly on Java that cannot trap the installer's exit (f6c23e9)
- api: keep the run command when the Fabric launcher is already installed (e3296a7)
- api: let a host pin its Preferences node and home directory (dd4fcc9)
- api: log a missing server manifest at debug, without a stack trace (bb6115a)
- api: reject a malformed Forge manifest entry instead of throwing (07a647f)
- api: run modloader installers via an optional JAVA_INSTALLER override (fe42cef)
- api: stop re-attempting a failed manifest download on every lookup (150d662)
- app: repair ConfigEditorViewModelTest after the requiredJavaVersion delegation (3446483)
- build: bump Qodana to 2026.2 so its Kotlin analyzer matches the source (b14d30d)
- build: point test-run files at /tests, not build/ (e7cce83)
- build: resolve the per-machine test properties at test time (2a2a2df)
- build: source updateManifests from the module that owns the resources (15111f7)
- build: spare the version-manifest cache when wiping the test home (8b87057)
- build: stop the build rewriting the shared Preferences node (4f53aa8)
- build: stop the test suites rewriting their checked-in properties (ef3280e)
- clientside,grinder: boot-pack inclusions + release-only MC + install diagnostics (0c9c121)
- clientside: a JVM that never launched is not a clientside crash (8ebb3bb)
- clientside: decide CRASHED from the console, and never boot without required dependencies (aca7217)
- clientside: do not spend a host boot's budget while the machine is asleep (b6ed102)
- clientside: gate Fabric/Quilt/LegacyFabric selection on MC support (14c319e)
- clientside: never score a killed or out-of-memory boot as a crash (34b5cbb)
- clientside: pre-launch setup aborts are INCONCLUSIVE, not CRASHED (4f5e09e)
- frontend: DrawerLink icon used misspelled
colourprop (05450f1) - grinder,api: tell a metadata gap apart from an unsupported Minecraft version (bee9e31)
- grinder,clientside: stop re-paying for loader combinations that cannot boot (b4b3402)
- grinder: advance the crawl cursor on work done, not on hand-out (1783eb7)
- grinder: catch the shutdown interrupt in the one-shot path too (f51dcba)
- grinder: do not let a shutdown interrupt escape grindAll (c39bee9), closes 1/#2 #3
- grinder: do not spend a boot's time budget while the host is asleep (1f92f58)
- grinder: drain in-flight containers on shutdown (ad28197)
- grinder: keep one generation of install console across a retry (32bfc2a)
- grinder: make the CurseForge crawl work against the real API (3c2bb27)
- grinder: order each batch round-robin across platforms (8ecea09)
- grinder: remove NUL byte from VerdictStore.kt (git stored it as binary) (ca99736)
- grinder: resolve the daemon's settings file against its own home (5ce44e3)
- grinder: verify + defend the CurseForge search contract (328f985)
- gui: settings save no longer leaves the unsaved-changes icon stuck on (bef3c1e)
About Pre-Releases
Do not release or publish a server pack generated using a pre-release of ServerPackCreator to your users.
If you do, and it turns out that your server pack doesn't work because of a bug in ServerPackCreator, that's on you for using a pre-release.When using pre-release installers, make sure to uninstall the previous pre-release first. Otherwise, the installers
own version checks may trigger an error out of my control. After uninstalling, install the newly downloaded one and
you're good to go.Only use the installers if you are versed in system-administration, manually editing and removing services, editing registries,
so on and so forth.Alphas
Alphas are feature-incomplete and very likely to have bugs. Consider them broken by default. Use at your own risk!
Betas
Betas are feature-complete and probably have bugs. Additional features may be added during the beta-phase of any given release, though.
If you are updating from version 5 or older and used the installers, then make sure to uninstall any previous version(s)
before using the installers for versions 6 and newer.Additional Installer-Notes
It is recommended to have administration-privileges when using the Windows and macOS installers.
I am not a member of the Apple Developer Program and won't pay for codesign-certificates, therefor installers are unsigned.
Running a given installer may produce warnings depending on what OS you are using. You may choose to install it anyway, please be aware though that doing so is, in general, not a safe practice. For ServerPackCreator, though, it is unfortunately the only way to run the installer.macOS DMG
MacOS will complain about potential security risks and refuse to install and run ServerPackCreator. To circumvent this, please see the official guides depending on your version of macOS: Ventura, Monterey or newer.
Windows EXE
Hit "More information" if the Windows SmartScreen-message pops up. Afterward, a button will appear which will let you run the installer anyway.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
6 downloads
-
Release 8.1.2
StableSome checks failedvirustotal.yml / virustotal (release) Has been cancelledCreate GitHub Pre-Release after GitLab tag mirror / Preparations (push) Has been cancelledCreate GitHub Pre-Release after GitLab tag mirror / JAR and media (push) Has been cancelledCreate GitHub Pre-Release after GitLab tag mirror / PreRelease (push) Has been cancelledCreate GitHub Pre-Release after GitLab tag mirror / News on Discord (push) Has been cancelledTest / build (push) Has been cancelledreleased this
2026-06-10 20:41:57 +02:00 | 172 commits to main since this release8.1.2 (2026-06-10)
📦 Other
- add certain_questing_additions to clienstide-mods (6056672)
- Add mods to whitelist, remove mods from clientside-list (abaf089)
- Add more Clientside mods thanks to @ModernGamingWorld (051f14b)
- Add various clientside mods thanks to @ModernGamingWorld (dd6a538)
- Clientside mods reported by @ModernGamingWorld (7944e39)
- Refresh license agreement (d87ab47)
- Update manifests, license report, remove exclusion from qodana (d42dce0)
- Update sponsors and contributors (5af31a8)
🔩 Dependencies
- Bump dependencies (bbc7e0f)
- Replace custom mslinks implementation with 1.2.0 of DmitriiShamrikov/mslinks (57fce81)
🦊 CI/CD
- deps-dev: bump @intlify/unplugin-vue-i18n (6ddf435)
- deps-dev: bump @intlify/unplugin-vue-i18n (b64b174)
- deps-dev: bump lodash in /serverpackcreator-web-frontend (01c466d)
- deps-dev: bump prettier in /serverpackcreator-web-frontend (53ef26f)
- deps-dev: bump vite-plugin-checker (e8ffccb)
- deps: bump @quasar/extras in /serverpackcreator-web-frontend (eb982d7)
- deps: bump @quasar/extras in /serverpackcreator-web-frontend (0238f43)
- deps: bump axios in /serverpackcreator-web-frontend (e5ae597)
- deps: bump axios in /serverpackcreator-web-frontend (044c58a)
- deps: bump com.fasterxml.jackson.module:jackson-module-kotlin (abb2fdb)
- deps: bump com.formdev:flatlaf in /serverpackcreator-app (b5af523)
- deps: bump com.formdev:flatlaf-extras in /serverpackcreator-app (9639c8a)
- deps: bump com.formdev:flatlaf-intellij-themes (cafbd4e)
- deps: bump com.install4j:install4j-runtime (290388a)
- deps: bump commons-io:commons-io in /serverpackcreator-app (2e7a08d)
- deps: bump de.comahe.i18n4k in /serverpackcreator-plugin-example (2b8cf07)
- deps: bump de.comahe.i18n4k:i18n4k-core in /serverpackcreator-api (2c0b6c7)
- deps: bump de.jensklingenberg.ktorfit:ktorfit-lib (17ad5d2)
- deps: bump follow-redirects in /serverpackcreator-web-frontend (71f69d9)
- deps: bump gradle/actions from 5 to 6 (a275326)
- deps: bump org.apache.logging.log4j:log4j-core (42b95da)
- deps: bump org.jetbrains.kotlin:kotlin-reflect (daaeccd)
- deps: bump org.jetbrains.kotlin:kotlin-stdlib (6471dd2)
- deps: bump org.jetbrains.kotlin:kotlin-test-junit5 (53daef0)
- deps: bump org.jetbrains.kotlin:kotlin-test-junit5 (3be0abe)
- deps: bump org.jetbrains.kotlinx:kotlinx-datetime (87c4d31)
- deps: bump org.junit.platform:junit-platform-launcher (ac993d6)
- deps: bump org.junit.platform:junit-platform-launcher (4252a75)
- deps: bump org.junit.platform:junit-platform-launcher (adaa6c2)
- deps: bump org.springframework.boot:spring-boot-starter-data-mongodb (868c145)
- deps: bump pinia in /serverpackcreator-web-frontend (cdef224)
- deps: bump postcss in /serverpackcreator-web-frontend (f978023)
- deps: bump qs and express in /serverpackcreator-web-frontend (c01b6f3)
- deps: bump quasar in /serverpackcreator-web-frontend (23f8896)
- deps: bump richardsimko/update-tag from 1 to 2 (0863159)
- deps: bump softprops/action-gh-release from 2.6.1 to 3.0.0 (4be388c)
- deps: bump vite in /serverpackcreator-web-frontend (da26b42)
🛠 Fixes
- web: Fixed Mongo repository entity type resolution (f882532)
If you are updating from version 5 or older and used the installers, then make sure to uninstall any previous version(s)
before using the installers for versions 6 and newer.Additional Installer-Notes
It is recommended to have administration-privileges when using the Windows and macOS installers.
I am not a member of the Apple Developer Program and won't pay for codesign-certificates, therefor installers are unsigned.
Running a given installer may produce warnings depending on what OS you are using. You may choose to install it anyway, please be aware though that doing so is, in general, not a safe practice. For ServerPackCreator, though, it is unfortunately the only way to run the installer.macOS DMG
MacOS will complain about potential security risks and refuse to install and run ServerPackCreator. To circumvent this, please see the official guides depending on your version of macOS: Ventura, Monterey or newer.
Windows EXE
Hit "More information" if the Windows SmartScreen-message pops up. Afterward, a button will appear which will let you run the installer anyway.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
2 downloads
-
Release 8.1.1
StableSome checks failedvirustotal.yml / virustotal (release) Has been cancelledreleased this
2026-04-13 20:47:09 +02:00 | 271 commits to main since this release8.1.1 (2026-04-13)
📦 Other
- Add Smooth Swapping to clientside list (40cc91a)
- Update package lock after dependabot changes (14f17ab)
🦊 CI/CD
- Bump Gradle version (6f0286f)
- Bump Kotlin to 2.3.20 (2e56ec5)
- deps-dev: bump flatted in /serverpackcreator-web-frontend (e2b1460)
- deps-dev: bump node-forge in /serverpackcreator-web-frontend (5565114)
- deps: bump axios in /serverpackcreator-web-frontend (d3c29d7)
- deps: bump axios in /serverpackcreator-web-frontend (c187fb9)
- deps: bump com.electronwill.night-config:toml (62b0912)
- deps: bump crazy-max/ghaction-virustotal from 4 to 5 (18fc574)
- deps: bump jaywcjlove/github-action-read-file from 2.0.0 to 2.1.0 (a2986b5)
- deps: bump on-headers and compression (3d64afd)
- deps: bump picomatch in /serverpackcreator-web-frontend (defb060)
- deps: bump qs and body-parser in /serverpackcreator-web-frontend (a0e0902)
- deps: bump softprops/action-gh-release from 2.5.0 to 2.6.1 (4ca6aaa)
- deps: bump tmp and inquirer in /serverpackcreator-web-frontend (ed46b6a)
🛠 Fixes
- Correctly parse Minecrafts new 26.x versions (4e911b0)
If you are updating from version 5 or older and used the installers, then make sure to uninstall any previous version(s)
before using the installers for versions 6 and newer.Additional Installer-Notes
It is recommended to have administration-privileges when using the Windows and macOS installers.
I am not a member of the Apple Developer Program and won't pay for codesign-certificates, therefor installers are unsigned.
Running a given installer may produce warnings depending on what OS you are using. You may choose to install it anyway, please be aware though that doing so is, in general, not a safe practice. For ServerPackCreator, though, it is unfortunately the only way to run the installer.macOS DMG
MacOS will complain about potential security risks and refuse to install and run ServerPackCreator. To circumvent this, please see the official guides depending on your version of macOS: Ventura, Monterey or newer.
Windows EXE
Hit "More information" if the Windows SmartScreen-message pops up. Afterward, a button will appear which will let you run the installer anyway.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
4 downloads