-
continuous
Pre-releaseAll checks were successfulContinuous / Preparations (push) Successful in 2m41sDocumentation and homepage / Version (push) Successful in 1m29sDocumentation and homepage / Homepage: Quasar build (push) Successful in 4m22sGrinder Container IT / containers (push) Successful in 14m16sQodana / scan (push) Successful in 16m48sTest / build (push) Successful in 14m59sDocumentation and homepage / Writerside webhelp (push) Successful in 4m35sDocumentation and homepage / Dokka HTML (push) Successful in 5m23sContinuous / JARs (push) Successful in 13m45sQodana / notify (push) Successful in 2m40sContinuous / AppImage (aarch64) (push) Successful in 2m45sContinuous / AppImage (x86_64) (push) Successful in 2m54sDocumentation and homepage / Help image (push) Successful in 13m33sTest / Docker image (push) Successful in 32m12sContinuous / install4j media (push) Successful in 10m24sContinuous / Windows app-image (x86_64) (push) Successful in 19m3sContinuous / Stage the release assets (push) Successful in 3m19sContinuous / Build (push) Successful in 0sContinuous / Continuous Pre-Release (push) Successful in 4m45sDocumentation and homepage / Homepage: image (push) Successful in 15m14sreleased this
2026-10-17 14:20:39 +02:00 | 0 commits to develop since this release🔄 Continuous Dev-Build
Built: 2026-10-17 13:28:20 UTC
Commit:7220b358da4a885d369f72eb5bfbe5e700467507
This is an automated development build, updated every time changes are pushed to
develop.⚠️ Warning: Do not use unless you have been told to, or are curious about the contents of the dev build.
🚫 Do not link to this release.
Downloads
-
Source code (ZIP)
223 downloads
-
Source code (TAR.GZ)
117 downloads
-
Source code (ZIP)
-
9.3.0
StableAll checks were successfulGenerate Release / semantic-release (push) Has been skippedGrinder Container IT / containers (push) Successful in 8m3sBuild Release / Preparations (push) Successful in 13sTest / Docker image (push) Successful in 12m14sTest / build (push) Successful in 41m41sQodana / notify (push) Successful in 23sQodana / scan (push) Successful in 13m6sBuild Release / JARs (push) Successful in 7m0sBuild Release / Docker images (push) Successful in 16m2sBuild Release / Windows app-image (x86_64) (push) Successful in 9m12sBuild Release / AppImage (aarch64) (push) Successful in 3m10sBuild Release / AppImage (x86_64) (push) Successful in 2m56sBuild Release / install4j media (push) Successful in 7m11sDocumentation and homepage / Homepage: image (push) Successful in 7m14sDocumentation and homepage / Help image (push) Successful in 6m51sDocumentation and homepage / Dokka HTML (push) Successful in 3m17sDocumentation and homepage / Version (push) Successful in 30sDocumentation and homepage / Homepage: Quasar build (push) Successful in 2m2sDocumentation and homepage / Writerside webhelp (push) Successful in 2m20sBuild Release / Stage the release assets (push) Successful in 2m0sBuild Release / Build (push) Successful in 0sBuild Release / Forgejo release (push) Successful in 2m6sBuild Release / VirusTotal scan (push) Successful in 1m19sBuild Release / Publish Maven (push) Successful in 5m33sBuild Release / News on Discord (push) Successful in 27sBuild Release / Mirror release outward (push) Successful in 2m2sreleased this
2026-10-16 23:19:54 +02:00 | 0 commits to main since this release💎 Improvements
- Modscanning: Skip dependencies which declare an incompatibility (e4844fa)
📔 Docs
- close every gap dokka reports, across all eight modules (7a05797)
- commit by goal, not by edit — Griefed's call, 2026-10-12 (de03a2c)
- delete commented-out code and corrections of older comments (1722c6e)
- drop refactor-phase provenance from doc comments (8c7ac27)
- measure call depth from the public entry points, and fix the Swing rule (a7f32be)
- record the 9.1.0..develop audit, three iterations (e5036e9)
- remove doc references to symbols that no longer exist (0f0851e)
- state the reason in the present tense instead of the past (f3a0b03)
- strip @param/@return that only repeat the prose above them (dd27037)
- api: say what the plugin extension points do and when they fire (21e4627)
- build: the recorded configuration-cache count is stale, and one of them is ours (4bdd0aa)
- ci: the media job's comment credited a mechanism that cannot happen (b7ca73e)
- homepage: pull the website subtree with --squash, or it reopens the changelog (c18d38c)
📦 Other
- homepage: import serverpackcreator.de as a subtree, squashed (c11f0ed)
- Homepage: Update CI for IDEA, add links for new help and api doc locations, update links to help (d5ca59d)
🦊 CI/CD
- deps-dev: bump eslint 9.39.5 -> 10.12.0, and @eslint/js with it (3d9e976), closes #1302 #264
- deps: bump foojay-resolver-convention 0.8.0 -> 1.0.0 (23fd7fd)
- deps: bump kotlin 2.4.20 -> 2.4.21 (9a66e55)
- deps: bump kover 0.9.9 -> 0.9.11 (86d08af)
- deps: bump miglayout-swing 11.4.3 -> 11.5.1 (a0aa154), closes #94 #120
- deps: bump the Gradle wrapper 9.7.1 -> 9.8.1 (ce6148b), closes #1304
- fold docker-test into test, so one workflow answers "did it pass?" (8a45c0c)
🧪 Tests
- api: KDocAttachmentTest misses a block separated by an annotation (c69baa4)
🚀 Features
- ci: publish a homepage image per commit, like the help image (025e847)
- homepage: serve the versioned help and API reference from serverpackcreator.de (838b571)
🛠 Fixes
- api: a failed download destroyed the file it was replacing, and a killed one cached as complete (84ccf4d)
- api: a manifest that cannot be parsed ended every start, with no way out from inside the process (fa4cf73)
- api: line endings and invisible characters can no longer break a server pack (7680f7e)
- api: reading a dependency's
typecould cost the mod its whole descriptor (4de7752) - api: VersionMeta.update carried two KDoc blocks, one of them dropped (5e7507a)
- build: a branch name with a slash in it no longer breaks bootJar (087e138), closes #713
- build: stop tracking the generated third-party licence notice (1bcc034)
- build: the install4j media never generated the licence it embeds (57eadb9)
- ci: the continuous build's GitHub half printed a traceback, not the reason (b88175e)
- ci: trigger the push-mirror sync instead of waiting for it (9431eb6)
VirusTotal
ServerPackCreator-9.3.0.jar- https://www.virustotal.com/gui/file-analysis/ODU2NTI2MTdiYWU5YWJhYzE4MGUxYjhiZjFmODlhOGM6MTc5MjE5OTEyMg==serverpackcreator-api-9.3.0-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZWIyMDViNzBkMTE3NmRkZDk2NTQ4Y2M0NTU3ZGU4MDI6MTc5MjE5OTEyNw==serverpackcreator-api-9.3.0-sources.jar- https://www.virustotal.com/gui/file-analysis/ZmM2Y2RhMDVkZTkyYTBhM2JiODFhYTUxYWZlMjQ3YTM6MTc5MjE5OTEzMA==serverpackcreator-api-9.3.0.jar- https://www.virustotal.com/gui/file-analysis/MTE4YzYzMTRjNzVmNWExYWNiNzI3ZmJjNDRmZDNlMDk6MTc5MjE5OTEzMg==serverpackcreator-app-9.3.0-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZjhiYjBkMDFmZTBmMjA5MjMxYTBmYjhmMGMyMzIxOTY6MTc5MjE5OTEzNQ==serverpackcreator-plugin-example-9.3.0_experimental.jar- https://www.virustotal.com/gui/file-analysis/NTViMjk2YThlYzEzMTg5ODFhNzdmMzYxMzc0OTc2MmE6MTc5MjE5OTEzNw==serverpackcreator-plugin-selfextract-9.3.0_experimental.jar- https://www.virustotal.com/gui/file-analysis/MTA2YTliMWM3YjExNjFhMTE1NmQyZTk5ZmJiOTQ4ODU6MTc5MjE5OTEzOQ==serverpackcreator-plugin-servertest-9.3.0_experimental.jar- https://www.virustotal.com/gui/file-analysis/ZDNiMGRhM2NkNTQ2OWJhNjQxNTBkNGM0MzU4MTUxNzE6MTc5MjE5OTE0MA==ServerPackCreator-9_3_0-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/YWFmZmJlYzFhNmE4M2I3MDkzODkxNTc4MjYzNzI4MGM6MTc5MjE5OTE0Nw==ServerPackCreator-9_3_0-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/YWU4MWI0MTBjNTNhN2U2NDI4ZDMwNjRiOGI4NTczNWU6MTc5MjE5OTE1NA==ServerPackCreator-9_3_0-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/MjYyZTliMDUwNmZiYWYzYmY1YWIxY2Y3OTc0NTRiMDc6MTc5MjE5OTE2MA==
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
9.2.1
StableSome checks failedGenerate Release / semantic-release (push) Has been skippedDocker Test / build image (push) Successful in 11m31sGrinder Container IT / containers (push) Successful in 7m39sBuild Release / Preparations (push) Successful in 26sDocumentation / Help image (push) Successful in 2m45sDocumentation / Dokka HTML (push) Successful in 5m26sDocumentation / Writerside webhelp (push) Successful in 2m27sBuild Release / Docker images (push) Successful in 10m34sQodana / notify (push) Successful in 8sQodana / scan (push) Successful in 10m43sBuild Release / JARs (push) Successful in 11m46sBuild Release / AppImage (aarch64) (push) Successful in 1m59sBuild Release / AppImage (x86_64) (push) Successful in 1m59sBuild Release / Windows app-image (x86_64) (push) Successful in 3m46sTest / build (push) Successful in 28m26sBuild Release / install4j media (push) Successful in 6m54sBuild Release / Stage the release assets (push) Successful in 2m1sBuild Release / Build (push) Successful in 0sBuild Release / Forgejo release (push) Successful in 2m3sBuild Release / VirusTotal scan (push) Successful in 1m31sBuild Release / Publish Maven (push) Successful in 5m8sBuild Release / News on Discord (push) Successful in 42sBuild Release / Mirror release outward (push) Failing after 5m51sreleased this
2026-10-11 15:53:52 +02:00 | 39 commits to main since this release⏩ Performance
- runner: tune the Windows runner guest, and the guide that builds it (0817b78)
📦 Other
- docs: Screenshots in Writerside docs (6e0b592)
🦊 CI/CD
- deps: @quasar/app-vite 2.4 -> 3.10, and the alias scheme it renames (053e1ef), closes #1296
- deps: bring every GitHub Action up to its current major (1d5e863)
- deps: declare the two build plugins the frontend imports but never declared (0097a64)
- deps: delete the .npmrc, whose every option npm ignores (c04edf6)
- deps: give Renovate a config it still understands (add6abf)
- deps: let Dependabot see where the Gradle versions actually are (46bd9f7)
- deps: refresh the frontend lockfile within its existing ranges (cb31c89)
- deps: vitest 3.2 -> 5.0, verified by mutation rather than by a green tick (644fb32), closes #1241
- deps: vue-router 4 -> 5, which @quasar/app-vite 3 requires (01cdef7)
🧪 Tests
- frontend: pin DrawerLink's icon colour, which nothing guarded (a84a7d3)
🛠 Fixes
- ci: the release build takes its artifacts from the shared definition (3a71fe7)
- ci: the Windows app-image build, and the duplication that broke it (6b09b87)
VirusTotal
ServerPackCreator-9.2.1.jar- https://www.virustotal.com/gui/file-analysis/MDAwMDM0MjNkNTI2MmExMGYzZTBlZmEwYWFmMWM2OTg6MTc5MTczMTA5Ng==serverpackcreator-api-9.2.1-javadoc.jar- https://www.virustotal.com/gui/file-analysis/YmQ3NmJlNDQ2NzJiYjlkZGJjM2Y4NGIyYzNjZWI2NDA6MTc5MTczMTA5OA==serverpackcreator-api-9.2.1-sources.jar- https://www.virustotal.com/gui/file-analysis/MjdhYTRlMTVjMWYzZTE3ZGI5NmUwMTIzNDA2OTUwOTA6MTc5MTczMTEwMA==serverpackcreator-api-9.2.1.jar- https://www.virustotal.com/gui/file-analysis/NTlhZjY0YzI4MTBmNzk2NjMxNDE1NWZjMjQyZTMyZGM6MTc5MTczMTEwMw==serverpackcreator-app-9.2.1-javadoc.jar- https://www.virustotal.com/gui/file-analysis/NWE1MTAzNTZhNzc3MWVlNjc5Y2Y3ZThkYTRmMDRkNGM6MTc5MTczMTEwNQ==serverpackcreator-plugin-example-9.2.1_experimental.jar- https://www.virustotal.com/gui/file-analysis/ZTkxY2E4MDdjM2IxOThmNTRiOGQ2MWI2Yzk5YmQ1M2M6MTc5MTczMTEwNw==serverpackcreator-plugin-grinder-9.2.1_experimental.jar- https://www.virustotal.com/gui/file-analysis/NzhiN2MwNmEwMTQxZmEwOTg2NmVmYWQzYmYxOTMwZjU6MTc5MTczMTEwOA==serverpackcreator-plugin-selfextract-9.2.1_experimental.jar- https://www.virustotal.com/gui/file-analysis/YWQ2NTYyMmQwOTY1MTJhYjQ3ZTFiZjVmMTliNTQ4NDg6MTc5MTczMTEwOA==serverpackcreator-plugin-servertest-9.2.1_experimental.jar- https://www.virustotal.com/gui/file-analysis/MWJhODg5YjNkZWU2ZmJlMDgwMWIwYzVkOGVlYzczMzA6MTc5MTczMTEwOQ==ServerPackCreator-9_2_1-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/Yjc1ZmFiODNkNzc1MGI0MGQ3ZTVjMmY1MjcwMGI1MjM6MTc5MTczMTExNg==ServerPackCreator-9_2_1-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/ZWRlMmJiMzRhOTJmMzAwZTg0NTAyYjE2ZDA3ZGVmYWI6MTc5MTczMTEyMw==ServerPackCreator-9_2_1-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/ODk5YmQ1Nzg3NzRjNjYwOWE1N2I5NWMxZDcxMzM0OTg6MTc5MTczMTEyOQ==
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
9.1.0
StableAll checks were successfulGenerate Release / semantic-release (push) Has been skippedDocker Test / build image (push) Successful in 28m21sGrinder Container IT / containers (push) Successful in 19m8sBuild Release / Preparations (push) Successful in 1m45sDocumentation / Help image (push) Successful in 12m23sDocumentation / Writerside webhelp (push) Successful in 4m14sDocumentation / Dokka HTML (push) Successful in 10m16sBuild Release / JARs, media and checksums (push) Successful in 25m11sTest / build (push) Successful in 1h30m23sQodana / notify (push) Successful in 48sQodana / scan (push) Successful in 21m3sBuild Release / Docker images (push) Successful in 37m8sBuild Release / Forgejo release (push) Successful in 5m14sBuild Release / Publish Maven (push) Successful in 13m9sBuild Release / News on Discord (push) Successful in 30sBuild Release / VirusTotal scan (push) Successful in 3m32sBuild Release / Mirror release outward (push) Successful in 4m42sreleased this
2026-10-02 22:55:31 +02:00 | 88 commits to main since this release✂️ Refactor
- servertest: route descendant liveness through one predicate (d70628a)
📔 Docs
- re-derive the module test counts from a full run (de428ba)
- record where a plugin jar's name is decided, and stop counting plugin modules (4a42b16)
- the registry cache is on the wrong daemon, and what the 2026-10-01 batch showed (75d22fd)
- Update branding for OS license sponsores (62361f8)
- ci: name all three conditions behind the doubled build, not just the per-ref key (1846932), closes #678
- ci: the runner-host registry cache, and the two constraints that shape it (99edb33)
🦊 CI/CD
- one command that builds every plugin, tests included, and stages them (971006c)
- run test JVMs headless, so a suite stops stealing the developer's focus (045addf)
- make the registry-cache probe say which of three things it hit (bafeb86)
- reach the registry caches by fixed IP, and probe what actually matters (ad3fa03)
- report the two new plugin modules' test results (49c8be4)
- Try and use conditional driver_opts (6a58d32)
- Try with runners_default (5f7f43a)
- Use actual network name (921d469)
- Use registry cache to reduce hub pulls (96d7e2c)
- forgejo: stop building every commit twice (e407506), closes #678
🧪 Tests
- api: rename the example-plugin fixture to the name the build now produces (092d1e0)
- servertest: pin that an unreaped descendant is not still running (15ba8d9)
🚀 Features
- build: every plugin jar says
_experimental, decided in one place (d8cec53) - ci: publish the help site and its API reference to GitHub Pages (6f080f8)
- ci: ship every plugin with the release, not only the example (ac7a970)
- docs: serve the Kotlin API reference inside the help site at /api/ (b12ac7c)
- selfextract: a plugin that wraps every server pack in a self-extractor (c38660a)
- servertest: a plugin that boots a generated pack through its own start scripts (332d5d8)
- servertest: the script the user picks, a list that keeps its selection, and three audit passes (fb95cb7)
🛠 Fixes
- api: contain a misbehaving tab extension instead of losing every tab (ff55964)
- api: reach the plugins appender, so a plugin's logging lands in plugins.log (429da41)
- api: resolve the installer-Java probe's template relative to the probe (759eb3f)
- app: give the embedded mongod a start budget a loaded CI host can meet (cac064b)
- ci: retry the image build when ghcr's burst limiter answers 429 (4ea1ae6)
- clientside: an unreaped descendant is not a running process (e66d12f)
- clientside: destroy a boot's descendants before the process that started them (a4a0411)
- grinder: stop the container ITs reporting on the daemon's load (c6ec992)
- servertest: ask whether a descendant is running, not whether its PID exists (716fb01)
VirusTotal
ServerPackCreator-9.1.0.jar- https://www.virustotal.com/gui/file-analysis/Y2VmMDk0NDdlOTdmYzU2NGI4ZjY5MjJkZWIwOWIyY2U6MTc5MDk5MTIyNw==serverpackcreator-api-9.1.0-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZTlhZjM0ZmI3MjU1NDZkMGE5YzM5ZjMwYzU4NGY5NjE6MTc5MDk5MTIyOQ==serverpackcreator-api-9.1.0-sources.jar- https://www.virustotal.com/gui/file-analysis/ZWY4ODQwMDQzOGFhNWYyZjkyNTQ4NzRhMWNlYjc2YTc6MTc5MDk5MTIzMQ==serverpackcreator-api-9.1.0.jar- https://www.virustotal.com/gui/file-analysis/NGYxYzg1YjI1M2RlYjRlNmQ2YmI4YjdhYTljYzJhMzA6MTc5MDk5MTIzNQ==serverpackcreator-app-9.1.0-javadoc.jar- https://www.virustotal.com/gui/file-analysis/YWUyYjE3ODUyZjgyYWRjZTRlYmY4OTBhMTE4YTczNGM6MTc5MDk5MTIzNw==serverpackcreator-plugin-example-9.1.0_experimental.jar- https://www.virustotal.com/gui/file-analysis/Nzg2MDY1N2NiNDhmY2U1YTBhNGU4NzMwMjY0ZmVkMDc6MTc5MDk5MTI2MQ==serverpackcreator-plugin-grinder-9.1.0_experimental.jar- https://www.virustotal.com/gui/file-analysis/Nzk3NzQ3ZDBiNWQ4ZjFhYzRlMTE1NGNiODA0NzI4NDg6MTc5MDk5MTI2Mg==serverpackcreator-plugin-selfextract-9.1.0_experimental.jar- https://www.virustotal.com/gui/file-analysis/MjFiZTg5Yjk5NTJiZjFiOTM2NGY1ZjlmYmI4YzQ3NTg6MTc5MDk5MTI2Mw==serverpackcreator-plugin-servertest-9.1.0_experimental.jar- https://www.virustotal.com/gui/file-analysis/ZDRlN2RlZjljMDA4YjExM2VlNDM1ZDZlNzllODdlOTk6MTc5MDk5MTI2NA==ServerPackCreator-9_1_0-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/OTYzMjEwYWUyNGY0ZWQ0ZTQwNzkyNDY5ZTVhYzZiYWE6MTc5MDk5MTI3MQ==ServerPackCreator-9_1_0-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/ZGMwNjg4NmMxZGVmYjI1MDk3YTQyYTlkMzc1MTUzM2U6MTc5MDk5MTM0OA==
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
9.0.0
StableSome checks failedGenerate Release / semantic-release (push) Has been skippedBuild Release / Preparations (push) Successful in 26sBuild Release / JARs, media and checksums (push) Successful in 21m32sBuild Release / Docker images (push) Successful in 15m34sBuild Release / Forgejo release (push) Successful in 2m52sBuild Release / VirusTotal scan (push) Successful in 1m18sBuild Release / Publish Maven (push) Successful in 7m13sBuild Release / News on Discord (push) Successful in 37sBuild Release / Mirror release outward (push) Failing after 5m48sContinuous / Build JAR (push) Has been cancelledContinuous / Build AppImage (x86_64) (push) Has been cancelledContinuous / Build AppImage (aarch64) (push) Has been cancelledContinuous / Build Install4J Media (push) Has been cancelledContinuous / Continuous Pre-Release (push) Has been cancelledDocker Test / build image (push) Has been cancelledDocumentation / Writerside webhelp (push) Has been cancelledDocumentation / Help image (push) Has been cancelledQodana / scan (push) Has been cancelledQodana / notify (push) Has been cancelledTest / build (push) Has been cancelledGrinder Container IT / containers (push) Successful in 5m1sreleased this
2026-09-28 21:02:28 +02:00 | 126 commits to main since this release⚠ BREAKING CHANGES
- api,clientside: version metadata as snapshots, and a dependency named and found
- clientside: the four-verdict result system, with every rule in an editable file
- clientside,grinder,app: drop the headless-browser download route
- modscanning: the scan rewrite — sideness, dependencies, and one scanner contract
✂️ Refactor
- app: Phase 2 and 3 — app layering, the ConfigEditor view-model, the plugin-example suite (72db77a)
- clientside: extract the clientside-mod verification engine into its own module (1b47cba)
- gui: own every coroutine on a component-scoped CoroutineScope (ef4387b)
⏩ Performance
- network, startup, GUI typing, generation throughput and the web query shapes (41498bb)
✨ Milestone
- 9.0.0 — Phase 0 and 1, the characterization baseline and the API decomposition (5fc86aa)
📔 Docs
- close the dokka backlog — 626 undocumented declarations to zero (fdac288)
- KDoc across every module, and the Qodana audit fixes (4153ea1)
🦊 CI/CD
- eleven dependency refs to their latest stable (955ab76)
- one version catalog, real Copy tasks, and a configuration-cache-friendly build (38d9b82)
- the coroutines 1.11 fallout, the Spring Boot BOM, and Kotlin 2.4.10 (c0f8a20)
- move the pipeline from GitLab to Forgejo (e36cafb)
- qodana: the scan starts reading what it reports on, and reaches zero (5ba1baf)
🧪 Tests
- api: ask fish and PowerShell themselves whether the templates parse (ccc1ccf)
- api: pin that no KDoc block comes loose from its declaration (1bb5b86)
- api: the coverage, dead-code and tech-debt pass (515355b)
- frontend: Phase 4 — Vitest, the TypeScript migration and component coverage (5efbfd1)
🚀 Features
- api,grinder: fish start-script templates, continuous grinding, and the script-template matrix (6dde67f)
- api: updating an existing server pack stops being experimental (d6d20f3)
- app: automate clientside-mod request verification, and harden the Actions workflows (8be0954)
- clientside,grinder,app: drop the headless-browser download route (e9eaead)
- clientside: grind one target per Minecraft version-line (21e3234)
- clientside: LOCKED and UNVERIFIABLE, so ERROR means what it says (c4d881e)
- clientside: the four-verdict result system, with every rule in an editable file (d094693)
- grinder: a container-backed daemon that boots every candidate mod (d2a124b)
- grinder: a live dashboard for /status, and the Fabric API and QSL module maps (083ae7a)
- grinder: container identity, /as-properties, graceful shutdown, and the CPU and memory caps (2d489ba)
- grinder: crawl the whole catalog, cache loader installs, and stream live boot logs (6b892ca)
- grinder: one deploy script for the daemon, with --clear and --bootstrap (37707a6)
- grinder: per-attempt boot logs, verdict provenance, and operator-editable boot rules (b322e2b)
- grinder: re-check a crash across versions and loaders, and re-grind what that got wrong (a967ebf)
- grinder: run as a service — home resolution, a systemd unit, an installer and a bind address (d7486e0)
- plugin-grinder: a GUI plugin over the grinder's verdict feed (b7b661f)
🛠 Fixes
- api,clientside: version metadata as snapshots, and a dependency named and found (53a659c)
- api,grinder: a self-extractor anyone can build, and a container engine with an identity (a276a64), closes #679
- api: bypass the ServerStarterJar where it cannot launch Forge (c0c5d41)
- api: the backlog pass — Forge launcher eras, the security-manager flag, the home preference (2d764b1)
- api: write the database URI under the key Spring Boot 4 actually reads (3acc371)
- app: the headless verbs report instead of throwing, and ConsolePrompt (0a4baca)
- app: the modpack upload, check and storage pass, against a real database (a672f13)
- build,ci: publish an actual library, and let the release body travel in a file (1fb65ff)
- ci,clientside: repair the release's Maven publish, and read a published version properly (5eb4c41)
- ci,docker: the Qodana JBR cache, the dind scope, and the container's MongoDB wiring (8f2cca7)
- clientside: publish only a crash that is decisive evidence of sideness (e6e2b71)
- modscanning: the scan rewrite — sideness, dependencies, and one scanner contract (1632cfc)
VirusTotal
ServerPackCreator-9.0.0.jar- https://www.virustotal.com/gui/file-analysis/Y2FiNmRiZmUzZGNkNzBlNWYxNzRiMzE5ZTMzYzFhMzM6MTc5MDYyNjMzNg==serverpackcreator-api-9.0.0-javadoc.jar- https://www.virustotal.com/gui/file-analysis/NGJjNmZhNGVjOWJlNWQ4ZDJjZDJjMDMwZDE2ZDlkOGY6MTc5MDYyNjMzNw==serverpackcreator-api-9.0.0-sources.jar- https://www.virustotal.com/gui/file-analysis/ZGVhNTA5YzgzOGE2NzQ3ZGI5NzliOGI2Mzc3NTJiYzc6MTc5MDYyNjM0MA==serverpackcreator-api-9.0.0.jar- https://www.virustotal.com/gui/file-analysis/NWMyMTE4ZTgxNWFkNWQ2ZmZhNGE0NTZmYjVkY2RkZGE6MTc5MDYyNjM0Mw==serverpackcreator-app-9.0.0-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZjA5ZDFlZjkyYTQ4YmJhYWU2YmRlMGIzZGRlYjQxOTU6MTc5MDYyNjM0Ng==serverpackcreator-plugin-example-9.0.0.jar- https://www.virustotal.com/gui/file-analysis/MzAyNTAwMWZiY2IyMTcxNDc0YmFjOWRiNTkyMmJjMzg6MTc5MDYyNjM0Nw==ServerPackCreator-9_0_0-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/MzQ4ZjczOGVhMzM4ZjRhYzkwM2Y0ZmRiNTY0ZGZhNzg6MTc5MDYyNjM1NQ==ServerPackCreator-9_0_0-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/ZmQ1NzQ0MzBmNDdjOTVlY2EzNjljZjRhOGIyNDEyODM6MTc5MDYyNjM2NA==ServerPackCreator-9_0_0-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/MjMxMTI4MzFhZWVkNDI2M2M5MjA4N2U5NmI4ZTc3MGY6MTc5MDYyNjM3MA==
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
-
9.0.0-beta.4
Pre-releaseSome checks failedGenerate Release / semantic-release (push) Has been skippedBuild Release / Preparations (push) Successful in 9sDocumentation / Help image (push) Successful in 2m26sDocumentation / Writerside webhelp (push) Successful in 2m26sBuild Release / JARs, media and checksums (push) Successful in 20m21sBuild Release / Docker images (push) Successful in 15m51sGrinder Container IT / containers (pull_request) Failing after 6m32sDocker Test / build image (pull_request) Successful in 12m1sBuild Release / Forgejo release (push) Successful in 2m11sBuild Release / VirusTotal scan (push) Successful in 1m30sBuild Release / Publish Maven (push) Successful in 8m50sBuild Release / News on Discord (push) Successful in 23sTest / build (pull_request) Successful in 30m51sBuild Release / Mirror release outward (push) Successful in 1m12sDocker Test / build image (push) Successful in 16m35sGrinder Container IT / containers (push) Failing after 10m11sQodana / scan (push) Successful in 14m29sQodana / notify (push) Successful in 43sTest / build (push) Failing after 48m13sreleased this
2026-09-27 20:33:21 +02:00 | -1365 commits to main since this release✂️ Refactor
- api: make the chunked-line backend reachable from a test (80e4a2b)
- api: one local runner, taking labelled commands (2a68d10)
📔 Docs
- append the container-ownership audit, with every finding and its resolution (2bea631)
- correct four stale references to
cleanup()and a configuration-cache claim it was part of (f7b6d6c) - make the self-extracting server pack buildable off Linux, and runnable on Windows (885580c)
- record that a bind mount is resolved by the daemon, and re-derive the api count (bab9e35)
- record that a gate nobody sets is an absent guard, not a skipped one (650c321)
- record the benchmark source set and the three things it does not inherit (166d151)
- record the Rosetta exit-code trap and where the PowerShell checks live (355e875)
- record what a repository-wide assertion audit found (66913f1)
- ci: record that a Forgejo run has two numbers and the routes disagree (c493137)
- grinder,ci: record the two labels, and that two refs build every commit in parallel (ee0cdd8), closes #678
📦 Other
- regenerate the license agreement for the dependency bumps (8bc69ef)
- update the shipped manifest snapshot to Minecraft 26.3 (152f895)
🦊 CI/CD
- bump dokka 2.1.0 -> 2.2.0 (19096ae)
- bump jackson, springdoc, bouncycastle and install4j (5bfca6b)
- bump Kotlin 2.4.10 -> 2.4.20 (3b242ca)
- bump pf4j 3.15.0 -> 3.16.0 (fdc1920)
- bump Spring Boot 4.1.0 -> 4.1.1, plugin and BOM together (5acc101)
- bump the license-report plugin 3.0.1 -> 3.1.4 (b53955f)
- app: stop re-declaring what java-conventions already does for
test(f7e1d0f) - grinder: give the store benchmark its own source set (9eaea96)
- ask Qodana for @Test methods that assert nothing (f4a761e)
- give the grinder's container tests the daemon to themselves (de38369), closes #678
- run the container-engine integration tests on every push (f273ca5)
🧪 Tests
- api: ask fish and PowerShell themselves whether the templates parse (aa77104)
- api: make three tests that only looked like guards actually assert (ecfef13)
- api: pin that a template probe's container can actually see the templates (205474d)
- api: pin that staging writes no empty file, and that a missing jar resource is loud (3a52fc9)
- api: pin that the Batch wrapper starts a pack whose path contains an apostrophe (22bcf36)
- api: pin the other copyFileFromJar overload, which had the same hole (3f391ef)
- api: pin the PowerShell installer-Java override and its fallback on every push (87660a6)
- grinder: pin that a container says which engine made it (e0dfbbf)
- grinder: stop the store benchmark claiming to be a test (d0caf44)
🚀 Features
- grinder: give a container engine an identity, before anything uses it (6e75484)
🛠 Fixes
- api: close the same hole in the directory-taking copyFileFromJar, and repair the test it fooled (bf29b30)
- api: copy the templates into the probe container instead of bind-mounting them (fe961ca)
- api: decide the template checks by completion marker, not exit code (f2d97ca)
- api: hand PowerShell the start script's path instead of pasting it into a string (8a85fdb)
- api: make a PowerShell glob that matches nothing a failure, not a silent pass (e5efd09)
- api: stop staging a Java batch template that does not exist, and fail loudly when one is missing (25f3355)
- app: stop logging a stack trace for a database that is merely absent (136a27a)
- app: tell the analyser that GridFS really does return null, rather than let it be wrong twice (6a72173)
- ci,grinder: authenticate the ghcr pull, and finish raising the container ITs' waits (40921ac)
- ci: link the Qodana artifact by run id, which is not the number in a run's URL (06eb59a)
- ci: upload plugin-grinder's test results too (ecaf2cf)
- grinder,ci: close the audit's findings — a vacuous assertion, a loose one, and a silent skip (797c247)
- grinder: assert what close promises, not what a quiet daemon happens to deliver (240dd82)
- grinder: drop the benchmark's unused import and its unresolvable KDoc link (cb61d70)
- grinder: make the benchmark a program, because a Test task cannot escape
check(ad52693) - grinder: make the ownership fixture stoppable, which is what the third guard was failing on (283710a)
- grinder: reattach three KDoc blocks the container-IT edits stranded (7d70e44)
- grinder: scope the container IT's assertions to the engine that made the containers (589c1d3)
- grinder: stamp which engine made a container, and never reap your own (87e8ce6)
VirusTotal
ServerPackCreator-9.0.0-beta.4.jar- https://www.virustotal.com/gui/file-analysis/ZDM3ZGQ1NDdkNTliMzdmY2VjMzk1ZDk0MGZlZDkwY2M6MTc5MDUzOTAxMA==serverpackcreator-api-9.0.0-beta.4-javadoc.jar- https://www.virustotal.com/gui/file-analysis/MjVhOWI4NTdmYWNhY2FmNTRiN2QyNDkzNmNmMTk1NDE6MTc5MDUzOTAxOA==serverpackcreator-api-9.0.0-beta.4-sources.jar- https://www.virustotal.com/gui/file-analysis/OWM5YzE5MjA4ZWQ5MjlhMjc5NmNjNDVhMjgzMjBlYjk6MTc5MDUzOTAyMQ==serverpackcreator-api-9.0.0-beta.4.jar- https://www.virustotal.com/gui/file-analysis/OTQ3NDc1MzkwZjMzZjQxOTE1ZmRlZjFjMWYyZDhhNmQ6MTc5MDUzOTAyMw==serverpackcreator-app-9.0.0-beta.4-javadoc.jar- https://www.virustotal.com/gui/file-analysis/MzhhMzVmMjBjMzdiMGQ0MGZlODkxN2I2ODMzMWJmODQ6MTc5MDUzOTAyNQ==serverpackcreator-plugin-example-9.0.0-beta.4.jar- https://www.virustotal.com/gui/file-analysis/OGNkYjFiNGUzNWU5MWQxYzU0MmIwNTBiYjM4N2U0Yzk6MTc5MDUzOTAyNg==ServerPackCreator-9_0_0-beta_4-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/YWU0NTY2ZWU2OTg2NDVmOGI2NjA3ZDgwYjJlZTM2YTI6MTc5MDUzOTAzNA==ServerPackCreator-9_0_0-beta_4-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/ZDk5NzAzNGM3ZGI2NzMzMjQ0NGE5OWVhNjBhMjBkYjQ6MTc5MDUzOTA0Mg==ServerPackCreator-9_0_0-beta_4-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/MWNhN2ZiODFhMzg2MTQyNGQwMjVlZDY0MGEwZGVjMzc6MTc5MDUzOTA1MQ==
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
9.0.0-beta.3
Pre-releaseSome checks failedGenerate Release / semantic-release (push) Has been skippedDocker Test / build image (push) Successful in 18m21sBuild Release / Preparations (push) Successful in 8sDocumentation / Help image (push) Successful in 2m22sDocumentation / Writerside webhelp (push) Successful in 2m8sTest / build (push) Successful in 31m31sQodana / notify (push) Successful in 30sQodana / scan (push) Successful in 12m53sBuild Release / JARs, media and checksums (push) Successful in 30m58sBuild Release / Docker images (push) Successful in 19m34sBuild Release / Forgejo release (push) Successful in 3m30sBuild Release / Publish Maven (push) Successful in 9m5sBuild Release / VirusTotal scan (push) Successful in 1m35sBuild Release / News on Discord (push) Successful in 31sBuild Release / Mirror release outward (push) Failing after 5m52sreleased this
2026-09-24 20:58:01 +02:00 | -1304 commits to main since this release✂️ Refactor
- api: give ServerPackGeneration a place for scan findings (35e6e66)
- api: give the modpack malware scan an observable seam (8b108fb)
- api: make ServerPackHandler.run's security scan injectable (a260780)
- app: give DatabaseStorageService the delete it never had (9cd0297)
📔 Docs
- analyse test depth and residual defects in the upload pass (f377983)
- audit the upload/check/storage pass against the conventions (e768516)
- correct four doc comments that described code that does not exist (3fb0333)
- mark the size row as app-scoped, not published-API (03ba296)
- record how each audit and analysis finding was closed (d2a2c46)
- record the new test seams, the springdoc correction, and B41/B42 (d5ec010)
- record the test-database follow-up and refresh the app count (c648840)
- record the upload/check/storage pass and refresh the counts (ea22bf6)
- api: document SecurityScans' companion instead of leaving it bare (310494e)
- api: document the last two undocumented companions (4940f18)
- api: say plainly that checkForInvalidPathCharacters returns true when CLEAN (9a088d5)
- app: document ConsolePrompt's companion (0fb7c27)
- app: record the embedded MongoDB setup and its landmines (8b61065)
🧪 Tests
- api: pin that a bad exclusion filter names the exclusion field (ae375df)
- api: pin that a modpack's server-icon survives having a manifest (71b348e)
- api: pin that a Modrinth index is actually read (cf05195)
- api: pin that a scan finding is not a generation failure (05c8eb9)
- api: pin that a ZIP modpack is scanned after it is extracted (6703b71)
- api: pin that an unextractable modpack fails its checks (e44ba09)
- api: pin that trimming a trailing dot trims only the trailing one (8ef6f2e)
- api: pin that unzipArchive declares no checked exception to Java (060266e)
- app: boot the context test against the embedded database (e94e32d)
- app: bound the suite's MongoDB server-selection timeout (c98cc3f)
- app: characterize the storage seam and both cleanup schedules (187ecad)
- app: cover the 415 refusal and both sweeps against a real database (bcb25ed)
- app: pin how a recorded download is identified and ordered (59c2cff)
- app: pin that a rejected upload costs nothing durable (5a857c3)
- app: pin that a stored file reports its size in bytes (3657fcb)
- app: pin that a throwing task must not kill the generation queue (fdffd4a)
- app: pin that an archive never travels through the heap (c9567b3)
- app: pin that an upload filename cannot steer the path it is written to (3002c30)
- app: pin that an upload name cannot inject a Content-Disposition parameter (65ced9b)
- app: pin the destructive edges of both nightly sweeps (131501f)
- app: pin the GridFS id round-trip, the empty miss, and the delete (30b335d)
- app: pin the paginated event sort too (eb76d83)
- app: repair a guard that stopped reproducing its own condition (aa0fe0e)
- app: run the persistence tests against a real MongoDB, in-process (4fbba1d)
- frontend: pin the regeneration path's ids and its error handler (5899b57)
🛠 Fixes
- make a generation's success mean the generation worked (6b7d890)
- report archive sizes in bytes, and stop hiding small packs (0111d3d)
- stop handing server paths and stack traces to anonymous callers (f5755f7)
- stop the regeneration path reporting ids that do not exist (8e10961)
- api: dispatch to the Modrinth manifest parser that nothing called (872900a)
- api: find a modpack's server-icon inside the modpack (62b5c26)
- api: handle an unreadable modpack directory instead of asserting on it (9148e28)
- api: let a failed extraction fail the modpack instead of vanishing (645b181)
- api: report a bad exclusion filter as an exclusion problem (c7bed07)
- api: restore Java source compatibility on unzipArchive (c9639c5)
- api: scan the modpack after it is extracted, not before (cb495c6)
- api: trim only the trailing dot or space, in both sanitisers (22ddd51)
- app: build the Content-Disposition header instead of interpolating it (011e782)
- app: declare the upload endpoint as multipart, and regenerate the spec (8a9e337)
- app: give a recorded download its own id, and sort on fields that exist (f05d28c)
- app: keep an upload's filename out of the path it is written to (57b172c)
- app: keep the generation queue alive when a task throws (fc8b89c)
- app: make both nightly sweeps survive the rows they trip over (282fa35)
- app: reclaim an orphaned pack once, not once per directory entry (94e38c1)
- app: reclaim the GridFS copy on delete, and return empty for a miss (25908c6)
- app: stream archives instead of carrying them through the heap (8bbd000)
- app: sweep orphaned files through storage, and stop asserting fileID (5aa02a7)
- app: type the GridFS miss honestly, and prove the guard fires (f150c06)
- app: validate an upload before storing it, and hash it without a heap copy (2a13cd2)
- build: publish kotlin-stdlib with a version, unbreaking the Maven release (43dc174)
VirusTotal
ServerPackCreator-9.0.0-beta.3.jar- https://www.virustotal.com/gui/file-analysis/YTgyNmNlOWNjNGZmOTVjMWY2YWYxZTZhZmFkZjg3ZWI6MTc5MDI4MTQyNw==serverpackcreator-api-9.0.0-beta.3-javadoc.jar- https://www.virustotal.com/gui/file-analysis/NWE3MDZlZGU0NWZjNGRlMzM2NTk5NzkxNmFhM2I0NmQ6MTc5MDI4MTQyOQ==serverpackcreator-api-9.0.0-beta.3-sources.jar- https://www.virustotal.com/gui/file-analysis/YzhhZGVmYzM4M2U3ZTA1NTEyZGNlZmVkZWIxZTRhN2M6MTc5MDI4MTQzMQ==serverpackcreator-api-9.0.0-beta.3.jar- https://www.virustotal.com/gui/file-analysis/MWZlN2IzOWIzYjNhMDBkMmJkY2NhZTE4ZGE3OTFjZDY6MTc5MDI4MTQzNA==serverpackcreator-app-9.0.0-beta.3-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZmQzZTZlMjA2M2NjMTg2MTEzZmY4OGFjMzVmYzZlNjE6MTc5MDI4MTQzNg==serverpackcreator-plugin-example-9.0.0-beta.3.jar- https://www.virustotal.com/gui/file-analysis/YTdhODA0ZDExNTBhMmNiMDViMjkyZmYxZmQ3NTViNmU6MTc5MDI4MTQzNw==ServerPackCreator-9_0_0-beta_3-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/OGY5MmQ3MGZkOWM1NTNiZDIyOTBkZjU5OTIxYzg3YmQ6MTc5MDI4MTQ0Ng==ServerPackCreator-9_0_0-beta_3-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/Y2I0ZjE2M2E2YTFkMDk0ZmU0ODJhYTc3M2U5ZTJmMmE6MTc5MDI4MTQ1NQ==ServerPackCreator-9_0_0-beta_3-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/OThjMDFhYzM0N2Y5YzFjMzBhYjEzZGI0YTMyNDAyODg6MTc5MDI4MTQ2Mw==
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
9.0.0-beta.2
Pre-releaseSome checks failedGenerate Release / semantic-release (push) Has been skippedDocker Test / build image (push) Successful in 18m10sBuild Release / Preparations (push) Successful in 1m9sDocumentation / Help image (push) Successful in 2m34sDocumentation / Writerside webhelp (push) Successful in 2m43sQodana / notify (push) Successful in 11sQodana / scan (push) Successful in 14m15sTest / build (push) Successful in 30m50sBuild Release / JARs, media and checksums (push) Successful in 27m53sBuild Release / Forgejo release (push) Successful in 3m0sBuild Release / VirusTotal scan (push) Successful in 1m42sBuild Release / Docker images (push) Successful in 19m38sBuild Release / Publish Maven (push) Failing after 6m27sBuild Release / Mirror release outward (push) Has been skippedBuild Release / News on Discord (push) Has been skippedreleased this
2026-09-22 20:49:06 +02:00 | -1234 commits to main since this release✂️ Refactor
- apply the five Qodana style notes that were actually improvements (5194af2)
- api: give the versionmeta snapshot locals speaking names (2b4228b)
- app: fold the four-site stdin test into ConsolePromptTest (351a264)
- app: read the home directory through ConsolePrompt (7d09c22)
- app: return whether a headless verb did what it was asked (4fcb499)
- clientside: let a guard see which client a fetcher got (69c1584)
- grinder: drop what the configuration extraction left behind (5d5435e)
- grinder: give the snapshot cache a window it does not yet use (05fed81)
⏩ Performance
- grinder: derive the report's selection once per store change (d0c0e5a)
- grinder: page with subList instead of copying the tail (b533afc)
- grinder: stop the report walking the whole store per request (8bfa261)
📔 Docs
- audit the Qodana-817 remediation (2f7c47e)
- close B39 and half of B38, and open B40 for the baseline (c7a2e37)
- close B40, and record why it landed by other means (2f1ef98)
- close the analysis findings, and retract one of them (ecc6234)
- close the Qodana-817 audit findings (bc39f0b)
- close two audit findings on the 2026-09-19/20 commits (710c2f7)
- correct three test counts, and record what the KDoc defect teaches (a3a149b)
- describe updating a server pack as a feature you can rely on (2dafb32)
- keep the hand-written 9.0.0-beta.1 release notes in the repo (a88c08a)
- reattach four KDoc blocks that had come loose from their declarations (60ab1f5)
- reattach or retire fourteen more KDoc blocks that had come loose (dae6834)
- reattach the two orphaned blocks the new guard found (a6ec920)
- record M4 closed, with the mutation that proves each new guard (52074eb)
- record that the root-level documents have two generated copies (6414f91)
- record the Qodana verdicts and the scan's blind spot as B38 and B39 (47a1603)
- the READMEs speak the six verdicts, not the deleted confidence scale (57434cb)
- app: record the ConsolePrompt landmine and why it exists (f689fa4)
- app: record the exit-code contract and its landmine (82f28d5)
- app: say what
runwith no subcommand actually does (8a6fa73) - ci: make the awk escaping comment readable (762ec50)
- ci: record the two undeclared limits the release notes outgrew (37f4e43)
- clientside: landmine the per-instance HttpClient, and correct the count (34fff82)
- clientside: restore the two arguments a deleted doc copy took with it (9c76272)
- grinder: name the firewall rule that was never there (d4fecb0)
- grinder: record what the report cached and what it quietly did not (c80ba52)
- grinder: record why the report stopped answering (eadf345)
- grinder: the report was never wedged, and the docs said it was (1239418)
- readme: document generating a server pack from the commandline (9de625c)
📦 Other
- qodana: encode the twelve standing won't-fix verdicts (8784620)
- qodana: refuse the eleven style notes that were wrong or worse (6b91956)
🦊 CI/CD
- qodana: generate the sources the scan cannot see (2d2a2d6)
🧪 Tests
- api: close the update mechanism's remaining test debt (2f37954)
- api: pin that no KDoc block comes loose from its declaration (5410807)
- api: pin what regenerating over an existing server pack does today (65071b6)
- api: red pin for a first generation losing the local variables.txt (b57efd7)
- api: red pin for a list-setting overwriting its own default (942382d)
- api: red pins for lazy mode ignoring protection and reporting nothing (f5ef805)
- api: red pins for what an update must guarantee (960e186)
- app: pin ConsolePrompt (RED) (3d024a3)
- app: pin that a path argument is reported, never thrown (RED) (4a44b38)
- app: pin that an interactive prompt leaves System.in open (RED) (f2c0d3a)
- app: pin that lang accepts the locale it displayed (RED) (2f38d92)
- app: pin the headless outcomes (one RED) (f4df200)
- clientside: red pin for a new HttpClient per fetcher (c7906d6)
- grinder: red pins for the three ways the report scales with the store (bfae849)
🚀 Features
- api: make updating an existing server pack safe for a running server (ee629eb)
- app: implement ConsolePrompt (80df991)
- app: take Update Server Packs out of its experimental state (006e46a)
- build: name the AppImage _experimental, and stop spelling that name twice (74a73b3)
- grinder: serve the report through the cache, on a configurable pool (148ccb3)
🛠 Fixes
- api: decide preservation once, and stop lazy mode ignoring it (5bc4e27)
- api: keep server.properties and variables.txt in an updated pack's archive (6ac06c3)
- api: stop a list-setting from overwriting its own shipped default (011af4f)
- app: ask for a config file, not a home directory (b2cd0ab)
- app: exit non-zero when a one-shot run failed (caa24ed)
- app: offer the locales lang actually accepts (0b58755)
- app: report a bad path to a headless verb instead of throwing (c539cfd)
- app: report a configs-directory that cannot be read (43e649e)
- app: say "directory" when cgen rejects a non-directory (b6dd98b)
- app: stop the interactive prompts closing System.in (b4c8e41)
- build: package the api javadoc jar during build, not just generate it (4e58c66)
- build: publish the library, not just its javadoc (5229508)
- ci: cap the mirrored GitHub release body at 125,000 characters (e4f1c53)
- ci: escape the changelog version where awk cannot undo it (7b5b3a3)
- ci: skip assets the Forgejo release already carries (02dd499)
- ci: stop curl -sf hiding why a release step failed (f889895)
- ci: the release body travels in a file, never in curl's argv (ae3102c)
- clientside: share one HttpClient instead of one per fetcher (5f78389)
VirusTotal
ServerPackCreator-9.0.0-beta.2.jar- https://www.virustotal.com/gui/file-analysis/NThhNDJjNmQxNWViNjM1YzM3OTI0ZmQxODkwMzFjMjU6MTc5MDEwNzQwMA==serverpackcreator-api-9.0.0-beta.2-javadoc.jar- https://www.virustotal.com/gui/file-analysis/OTg2ZWQ0ZWVkOGY2ZTFiNmY2ZjRjYWRmNGU3ZWM0ZTQ6MTc5MDEwNzQwMg==serverpackcreator-api-9.0.0-beta.2-sources.jar- https://www.virustotal.com/gui/file-analysis/MzVkNTNmOThlMGRhZTNhY2I1NWRkYmVlNWVlNTlhN2U6MTc5MDEwNzQwNA==serverpackcreator-api-9.0.0-beta.2.jar- https://www.virustotal.com/gui/file-analysis/NmNjMWVjMWRmNTcwZTM0N2VhZTY4NDNmYTQ3NzFmY2Q6MTc5MDEwNzQwNw==serverpackcreator-app-9.0.0-beta.2-javadoc.jar- https://www.virustotal.com/gui/file-analysis/YmE4YzkxODhiZTBlN2JhMTQ0OWZlODE1NTJmYzAzMzE6MTc5MDEwNzQwOQ==serverpackcreator-plugin-example-9.0.0-beta.2.jar- https://www.virustotal.com/gui/file-analysis/ZGRkNzM4ODJlOWNjZjFhMWFiNTA2ZDU3YTkyZmMyNzQ6MTc5MDEwNzQxMA==ServerPackCreator-9_0_0-beta_2-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/MWI5NjRjZTdiNWJhZDViM2UxMTZiZjI2NGNmYTJkNTY6MTc5MDEwNzQxNw==ServerPackCreator-9_0_0-beta_2-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/ZTNmY2MzZDU1NGU5YWFmZTMxYTUxNTU1NmVjOWJiMTM6MTc5MDEwNzQyNg==ServerPackCreator-9_0_0-beta_2-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/ZWQ5OTlmMWNmNzc4MmYzMTM5ZmY1ZTQ4MzcyMGU3MTE6MTc5MDEwNzQzNQ==
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
2 downloads
-
9.0.0-beta.1
Pre-releaseSome checks failedGenerate Release / semantic-release (push) Has been skippedBuild Release / Preparations (push) Successful in 35sDocker Test / build image (push) Successful in 18m30sDocumentation / Help image (push) Successful in 3m15sDocumentation / Writerside webhelp (push) Successful in 2m33sQodana / notify (push) Successful in 17sQodana / scan (push) Successful in 11m27sTest / build (push) Successful in 28m15sBuild Release / JARs, media and checksums (push) Successful in 29m47sBuild Release / Forgejo release (push) Failing after 1m12sBuild Release / VirusTotal scan (push) Has been skippedBuild Release / Docker images (push) Successful in 18m30sBuild Release / Publish Maven (push) Successful in 5m8sBuild Release / Mirror release outward (push) Has been skippedBuild Release / News on Discord (push) Has been skippedreleased this
2026-09-15 19:38:49 +02:00 | -1139 commits to main since this releaseServerPackCreator 9.0.0-beta.1
The first beta of the 9.0.0 line, and the first 9.0.0 build aimed at people who are not
already following the alphas.Most of the work since 8.1.2 went into one question: which mods are client-only, and how do we
stop guessing? The answer has two halves, and they reach you very differently.The first half is the automatic detection built into every server pack generation, and it got
substantially more accurate. You get that one for free — in the GUI, the CLI and the web UI
alike, without doing anything.The second half is new tooling that can prove a mod is clientside, by booting a real server with
it and watching it die. That half is command-line only and needs Docker. There is no GUI for it
in this release — if you use ServerPackCreator through its window, it is not something you will
see. It is there for people comfortable running the jar with arguments.Alongside both sit a pile of fixes to the generated start scripts, without which a lot of modern
Forge packs simply never started.This is a beta. It has had far less real-world mileage than 8.1.2. Keep a backup of your
configuration, and — as always — test your server pack before you hand it to anyone.
Clientside-mod detection
Forge packs on Minecraft's newer year-based versions got detection at all. The scanner was
picked by comparing only the minor part of the Minecraft version, so on a26.xversion every
jar failed the scan and was kept. Those packs now get themods.tomlscan that actually works.Be aware of what that means in practice: if your pack quietly relied on nothing ever being
excluded, mods will now start being excluded. That is the bug being fixed rather than a new one,
but it is a visible change — check your first server pack after upgrading.Related, on the same code path: a NeoForge pack on a Minecraft version the version parser could not
hold (26, for instance) used to throw and abort the whole generation. Both cases now fall back
to the modern scanner instead.Fabric, Quilt and their API jars stopped being thrown away.
- Fabric API, QFAPI and
quilt_basewere being treated as "the platform" rather than as real
dependencies. They are now reported properly, which means a Fabric API jar that a custom
clientside list had disabled gets pulled back into the server pack when something you kept
depends on it. - Mods now resolve dependencies through a jar's declared aliases. Fabric API calls itself
fabric-apibut providesfabric, so a mod depending onfabricwas naming an id no jar
answered to — and the pack it produced installed and then died on load. - A Quilt jar with no
quilt.mod.json— which is most of them, since Quilt runs Fabric mods —
now reads its Fabric descriptor instead of discarding everything the jar declared.
The bundled clientside-mod list grew from 496 to 548 entries. One of those is a repair rather
than an addition: in 8.1.2 theconfigured-line was missing its trailing comma, welding it to
connectedness-into a single nonsense entry, so neither mod was ever excluded. They are two
entries again.One bad list entry no longer kills the generation. With regex filtering enabled, a single
malformed entry used to throw straight out of the mod-list compiler and abort everything. Now that
entry simply never matches, the problem is logged once, and every other entry still applies.
New: check a mod yourself — command line only
Not available in the GUI. These are four new commands for the jar, usable as launch arguments
or inside the interactive CLI (-cli). If you only ever use the graphical window, skip this
section — nothing here changes what that window does.Command What it does -scan <dir> --loader <L> --minecraft <V>Reads the declared sideness of local jars and prints JSON. No network, no boot. -clientsidereport <url>Metadata-only report for a CurseForge or Modrinth project. Fast. -verifyclientside <url>The decisive one: downloads the mod and its dependencies, builds a server pack, and boots a real dedicated server in a container to see what actually happens. -clientsideapply --report <json>Feeds accepted entries from a report into your clientside-mod list. The reason
-verifyclientsideexists is that what a mod says about itself is not reliable. A mod
can declare itself server-safe and still crash a server, because its client-only code was wired up
wrong — and CurseForge has no sideness field at all, so for CurseForge mods there is nothing to
declare. Only a crash proves anything.Each check ends in one of six verdicts:
Meaning 🟢 CONFIRMED A server actually died with this mod installed, and a rule named why. The only verdict strong enough to act on. 🔵 CLEAR The server reached its ready line and nothing went wrong — proven fine for that build. ⚪ INCONCLUSIVE The boot ran and did something odd, with nothing explaining why. 🛠 ERROR The check could not be run and it is fixable at your end — a failed download, a pack that would not generate. 🔒 LOCKED The mod author opted out of CurseForge distribution, so there is no file to download. Retrying never helps; try the same project on Modrinth. 🚫 UNVERIFIABLE The check was never possible for reasons outside both you and the mod — a required dependency nobody published for that loader and Minecraft version, for example. Read
CLEARhonestly: it means this build, with these dependencies, on that Minecraft
version, started cleanly. It is not a general guarantee.
Server packs that actually start
All three start-script templates were fixed, and these are the difference between a server that
boots and one that does not:-Djava.security.manager=allowis fatal from Java 24 onward — the JVM refuses to start at
all. The templates now pass it only below Java 24. Minecraft 26.x requires Java 25, so before
this every Forge pack on a modern Minecraft was dying before Forge even loaded.- The check guarding that flag read the Java version before the script had worked one out, so it
was still the literal placeholderdo_not_manually_edit— meaning a pack that installs its own
Java passed the fatal flag anyway. The version is now read after the Java check, and the guard
fails safe. - From Java 24 the templates run the Forge installer themselves and launch from
unix_args.txt
(win_args.txton Windows) instead of handing the install to the ServerStarterJar. This fixes the
maddening one where a fresh Forge pack printed "The server installed successfully", exited 0,
and never launched — and then worked if you ran it a second time. - The ServerStarterJar is also bypassed for Forge on Minecraft 1.20.2 and 1.20.3, which it cannot
launch at all. - fish start scripts were added alongside bash and PowerShell.
- The server's real exit code is now passed back out of the script, so service wrappers and
restart-on-crash setups see what actually happened.
Faster, and it no longer freezes on a bad connection
- Startup no longer waits on the network. Version metadata refreshes in the background instead
of during construction: roughly 399 ms → 47 ms in the median case, and far more than that when
you are offline. Version dropdowns still wait for real data before they are shown, so they stay
correct. - Every outbound request now has a timeout — 5 s connect, 15 s read, 60 s for downloads, all
configurable. Previously nothing had one, so a host that silently dropped packets could leave the
splash screen stuck at 20 % with no way out but killing the process. Setting a timeout to0
restores the old unbounded behaviour if you want it. - Startup makes half the requests it used to — 24 down to 12, and 489 KB down to 214 KB — by
asking whether a manifest changed instead of re-downloading it. - Typing in the config editor is much cheaper. The editor's background check used to make an
HTTP request and re-parse the whole launcher manifest on every pause in typing. Both are now
remembered. Failures deliberately are not cached, so a momentary network blip does not leave the
editor insisting the server is unavailable until you restart. - Autocomplete no longer reinstalls the entire look-and-feel on every keystroke.
- Saving settings no longer leaves the unsaved-changes marker stuck on.
- If you run two or more plugins, their tabs now appear once each instead of once per installed
plugin.
Docker and the web UI
Read this one if you run ServerPackCreator as a service.
Spring Boot 4 retired the
spring.data.mongodb.uriproperty. A retired property does not warn — it
is simply not read — so ServerPackCreator was silently ignoring every configured database host,
credential and database name and falling back to Spring's own default. The property is now
spring.mongodb.uri.- Your
serverpackcreator.propertiesneeds no edit. ServerPackCreator reads the new key, falls
back to the old one if that is all it finds, and rewrites it under the new name. The old line is
deliberately left in place so a downgrade still finds its URI. - Docker users setting
SPC_DATABASE_HOST/_PORT/_DB/_USERNAME/_PASSWORDneed
change nothing — the container builds the new property itself. - You do need to update anything of your own that writes the old key — your own
overrides.properties, a deployment script, an environment variable you set by hand. Nothing
ServerPackCreator can do will fix those, and Spring will ignore them without saying so. - A side effect worth knowing: URI query parameters work again, because the property they were on
was being ignored entirely.
Also in this area:
- The container no longer loses its
--homeargument. The web service was overwriting the last
element of its argument list rather than appending to it, so the value of the final argument was
silently dropped — and in the container that argument is--home. - Startup no longer dies if the database is not up yet. Index creation moved off the startup
path; previously, losing the race with thedbservice meant a 30-second wait, a timeout, and a
dead application — which is the normal first boot of a compose stack. - The fallback database URI was never a valid URI (it carried literal backslashes), so every fresh
web installation started from something the driver rejects. Fixed, and existing installs repair
themselves. - Run-configuration mod lists are now stored in the document itself. This removes roughly 550
database round-trips per created run configuration. Stored documents are migrated automatically on
first start. If you consume/api/v2/runconfigsdirectly,startArgs,clientModsand
whitelistedModsare now plain string arrays. - Duplicate run-configuration detection was matching configurations that shared a single mod.
It now requires an exact match.
The update checker
Pre-release ordering was broken, and this release is the one that fixes it. The check compared
only the number after the dot, ignoring the channel, so withbeta.3published:- someone on
alpha.2was offeredbeta.3— correct by accident,3 > 2 - someone on
alpha.5was offered nothing at all —3 > 5is false
Channels are now ordered properly (alpha → beta → release) with the number as a tie-break. Update
checks are also bounded by the new network timeouts, rather than potentially hanging forever.
Breaking changes
Five, and four of them affect nobody running ServerPackCreator normally. Listed with who
actually needs to care:Change Who it affects Version metadata is handed out as immutable snapshots Plugin authors only. Three return types narrowed: LegacyFabricMeta.supportedMinecraftVersions()toList, andForgeMeta.getForgeMeta()/NeoForgeMeta.getNeoForgeMeta()toMap. Widen your declarations. If you were modifying what you got back, stop — you were corrupting shared state. This also fixes crashes and silently-empty reads while the background refresh was running.JsonBasedScannerremovedPlugin authors only, and only one that subclassed it. Extend JsonDescriptorScannerinstead — samegetJarJson, plus the scanning contract. Every concrete scanner keeps its name and signature.The headless-browser download route was removed Only the new -verifyclientsidecommand, which cannot verify a CurseForge project whose author opted out of distribution. It reports why and points you at Modrinth. It had already stopped working anyway. Nothing about normal server-pack generation changes.ConfidenceandaggregateFordeletedNobody. Internal to an unpublished module, replaced by the six verdicts above. One grinder deploy script instead of two Only people self-hosting a grinder instance. update-grinder.shis gone;sudo ./install-grinder.shdoes that job.
Upgrading from 8.1.x
If you use the GUI or the CLI: nothing to do. Java 21 is still what you need, unchanged from
8.1.2. Do check your first generated server pack, since Forge clientside detection now works where
it previously did nothing.If you run Docker or the web UI: see the database property above. In short — the application
migrates itself, but anything you wrote that setsspring.data.mongodb.urimust be changed to
spring.mongodb.uri.If you write plugins against
serverpackcreator-api:- Widen the three narrowed return types listed above.
- Replace
JsonBasedScannerwithJsonDescriptorScanner. - Require kotlinx-coroutines 1.11.0 or newer. If your build pins 1.10.x, you get a
NoSuchMethodErrorat runtime, not a compile error. - If you call
ListUtilities.parallelMapwithout passing your own context, elements now run on the
shared dispatcher instead of being accidentally serialised onto one thread. A lambda that mutates
shared state without synchronisation can now race — pass a single-threaded context to keep the old
behaviour. - If you construct
ApiPluginsdirectly, callloadAndStart()afterwards. - If you read version metadata immediately after constructing it and need fresh upstream data, call
awaitManifestRefresh(timeoutMillis). - An unusable home directory now throws
IllegalStateException, notIOException.
Known limitations
- The clientside-checking commands have no GUI. They are command-line only in this release.
-verifyclientsideis slow and heavy. Minutes per mod, and the first run downloads a
Minecraft server and a modloader — a few hundred MB of disk. It needs Docker.- CurseForge needs an API key (
CURSEFORGE_API_KEY) for any of the clientside commands to
resolve a CurseForge link. Modrinth does not. - Mods whose authors opted out of CurseForge distribution cannot be verified at all. There is no
file to download. Check the same project on Modrinth instead. - The grinder daemon and its GUI plugin are not part of this download. What ships here is the
detection built into generation, the four CLI commands, and the bundled clientside-mod list.
Downloads
File What it is ServerPackCreator-9_0_0-beta_1-Installer-Windows-x86_64.exeWindows installer, bundles Java 21 ServerPackCreator-9_0_0-beta_1-Installer-Mac.dmgmacOS installer, bundles Java 21 ServerPackCreator-9_0_0-beta_1-Installer-Linux-amd64.shLinux installer, bundles Java 21 ServerPackCreator-9.0.0-beta.1.jarThe application as a plain jar. Requires Java 21 serverpackcreator-plugin-example-9.0.0-beta.1.jarExample plugin, for plugin authors serverpackcreator-api-9.0.0-beta.1.jar+-sources/-javadocThe API library, also on Maven Central serverpackcreator-api-9.0.0-beta.1-dokka-html.zipAPI documentation as browsable HTML serverpackcreator-app-9.0.0-beta.1-javadoc.jarApplication javadoc checksum.txtSHA-256 of every file above updates.xmlUpdate descriptor, used by the installers Docker images are published as
griefed/serverpackcreator:9.0.0-beta.1on Docker Hub and ghcr.io.
Full changelog
1,121 changes since 8.1.2. The complete commit-level list — including the 297 documentation and
277 test commits left out above — is in
CHANGELOG.md at this tag.Found a problem? Open an issue — beta
feedback is the entire point of a beta.VirusTotal
ServerPackCreator-9.0.0-beta.1.jar- https://www.virustotal.com/gui/file-analysis/ODIxMmRiNDcwZjhiMWI2NTM2MjhmY2VjYjNlZjMxZTE6MTc4OTc1MDc2MQ==serverpackcreator-api-9.0.0-beta.1-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZjQzNDM2ZDZiZWMzMjEyOTBmNmFmMjI4YWQ2MDI2MDQ6MTc4OTc1MDc2Mw==serverpackcreator-api-9.0.0-beta.1-sources.jar- https://www.virustotal.com/gui/file-analysis/NDVkYzYyNTMzODVhYmYwMDc4MDY0NDZhYzVkNmM3NTk6MTc4OTc1MDc2OA==serverpackcreator-api-9.0.0-beta.1.jar- https://www.virustotal.com/gui/file-analysis/MjBjZGVjYjc2NGRlMmMwMTNmNTMxYjA2OGQ0MGEwZGQ6MTc4OTc1MDc3MQ==serverpackcreator-app-9.0.0-beta.1-javadoc.jar- https://www.virustotal.com/gui/file-analysis/MWNlMGU2MjY1OGU5ODcxZDdhY2U0ZjU4Mzc2MzU3ZDY6MTc4OTc1MDc3Ng==serverpackcreator-plugin-example-9.0.0-beta.1.jar- https://www.virustotal.com/gui/file-analysis/YTVjNDMxNDVmZDcyOGMzMWIwZGQzYTZjYjMwZmEwOWY6MTc4OTc1MDc3Nw==ServerPackCreator-9_0_0-beta_1-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/NWU3MjEzNGVkNDQxYWNhMmE1OWY2NGI2ZWNhZWQ0NTE6MTc4OTc1MDg1OA==ServerPackCreator-9_0_0-beta_1-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/ZTdmZGQ4MDVmMWU0MGIwMjMwYjM2NmIzMWI2NmQxZjQ6MTc4OTc1MDk0Ng==ServerPackCreator-9_0_0-beta_1-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/MGRjYzU2YzI2YjViNjhiY2E5NGE0YmEzZjdlOTQ0OGU6MTc4OTc1MTAyMA==
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
2 downloads
- Fabric API, QFAPI and
-
9.0.0-alpha.9
Pre-releaseSome checks failedGenerate Release / semantic-release (push) Has been skippedBuild Release / Preparations (push) Successful in 22sDocker Test / build image (push) Successful in 20m53sDocker Test / build image (pull_request) Successful in 14m20sDocumentation / Help image (push) Successful in 2m2sDocumentation / Writerside webhelp (push) Successful in 2m10sTest / build (push) Successful in 35m36sBuild Release / Docker images (push) Successful in 16m38sQodana / notify (push) Successful in 15sQodana / scan (push) Successful in 21m49sBuild Release / JARs, media and checksums (push) Successful in 23m34sBuild Release / Forgejo release (push) Successful in 2m40sBuild Release / VirusTotal scan (push) Successful in 1m38sBuild Release / Publish Maven (push) Successful in 6m9sBuild Release / News on Discord (push) Successful in 41sBuild Release / Mirror release outward (push) Failing after 5m56sTest / build (pull_request) Successful in 48m11sreleased this
2026-09-14 19:33:33 +02:00 | -1137 commits to main since this release✂️ Refactor
- clientside: a seam for what a Forge-family loader provides (599a81d)
- clientside: drop a fixture no guard reads (3ba3404)
- clientside: let the registry offer more than one ref per mod id (89730de)
- clientside: name the verdict after the target, not the loader (1d21e26)
- clientside: route the dependency comparison through VersionOfFile (bcce3c6)
📔 Docs
- audit and analysis of the UNVERIFIABLE pass (iteration 1) (1983d94)
- audit and analysis, iteration 2 (3d29c5b)
- audit and analysis, iteration 3 (b818eda)
- close B36 — the Connector boot is dropped, not deferred (d3131bc)
- document the last 9 declarations Dokka reported silent (dc763e9)
- iteration 1's resolutions, and why four findings were recorded rather than rewritten (2cb1259)
- iteration 2's resolutions, and M-4 corrected in place (7cc2905)
- iteration 3's resolutions, and what three passes were each good for (e6b6ed0)
- make the renamed field findable, and scope the channel rule (4d605ad)
- measured counts, and three lessons from the loader-choice pass (a8bb9f7)
- re-measure clientside after the end-to-end guards (13cc457)
- the branch's measured equivalence against develop (99c0896)
- the false positive in the published list, and the audit that missed it (8c3f6a4)
- the field report that found a class, not a case (32c9b58)
- the grind axis, and the per-loader claims it made false (08116fa)
- the three landmines the audit iterations produced (e8c7915)
- the two facts a real jar had to settle, and what they show (9f660ad)
- the UNVERIFIABLE pass, its landmines and its two deferrals (f823999)
- the whole branch proved equivalent to develop for every pre-existing guard (5a38e8d)
- what the public grinder's 40 dependency failures turned out to be (aa7de38)
- clientside: the two ways a loader choice is now re-opened after staging (92a9f51)
- clientside: why LOADER_PRIORITY starts at NeoForge, measured (071f023)
- plugin-grinder: document the 19 declarations Dokka reported silent (80d3ffc)
📦 Other
- Run claude doctor (fbe8136)
🧪 Tests
- pin the six rules the analysis found asserted nowhere (8c9415d)
- api: pin that an unparseable Minecraft version cannot crash NeoForge dispatch (0c10011)
- clientside: both new refusals reach re-selection, through real staging (53be818)
- clientside: name the sampled artifact's guards after what they pin, and pin the producer (3e1e135)
- clientside: pin a client-only dependency as decisive evidence (RED) (ad0accd)
- clientside: pin botanypots as a mod id no guess can reach (RED) (5b904a7)
- clientside: pin re-selecting the loader from the jar (red) (c51d67e)
- clientside: pin that a clean boot outranks an inherited client-only proof (52d46b9)
- clientside: pin that a Connector placeholder is not a Forge mod (3a671ff)
- clientside: pin that a CurseForge dependency is found across the version line (3853b77)
- clientside: pin that a Forge-family loader provides its own id (RED) (f898e49)
- clientside: pin that a forked project serves its original's mod id (red) (7c8207a)
- clientside: pin that a release beats a newer-Minecraft beta (4eadf4e)
- clientside: pin that a verdict names the file staging selected (e9f6910)
- clientside: pin that Quilt's
unlessclause satisfies a requirement (c1ac29d) - clientside: pin the Connector marker in NeoForge's renamed descriptor (de4ffee)
- clientside: pin the line prefix, and a dot that must not separate (RED) (f28e997)
- clientside: pin the loader gate to the descriptor eras (851098c)
- clientside: pin the plain build over its own variant (RED) (9e2a199)
- clientside: pin the three defects the audit found (red) (99fefab)
- clientside: pin the two ways a declared range fails to narrow (RED) (c5b3f0d)
- clientside: pin the two ways a dependency ref goes missing or is invented (red) (9643d2d)
- clientside: pin three CurseForge ids no slug guess can reach (RED) (739febe)
- grinder: pin that a verdict's identity is its Minecraft line (6066438)
- grinder: pin that only a followable scheme becomes an href (red) (52c09e7)
- grinder: pin that the Filename column names the sampled artifact (cbddb26)
🚀 Features
- clientside,grinder: grind one target per Minecraft version-line (d39af6e)
- clientside: boot a caller-chosen target, and carry its Minecraft version (f81ea45)
- clientside: MinecraftLinePolicy, which lines of a project get ground (4aee754)
- clientside: pickGrindTargets, one loader per Minecraft line (21310b7)
- grinder: SPC_GRINDER_MINECRAFT_LINES_NEWEST and _LINE_ANCHORS (e0ac9fb)
- grinder: the report shows and filters the Minecraft line (602f088)
- plugin-grinder: show the Minecraft line a verdict is about (b05379a)
🛠 Fixes
- build: refuse to configure a Dokka module that has no module.md (fae4402)
- build: stop dokkaJavadocJar failing on a duplicate index.html (780115b)
- ci: publish the api's javadoc jar, not every module's (0731b75)
- ci: stop five workflows running on the creation of alpha/beta (b8b28d8)
- clientside,grinder: a clean boot outranks an inherited client-only proof (4bc3516)
- clientside,grinder: judge a demand the loader itself has to satisfy (60ad8fe)
- clientside: a bundled jar's own demands bind like a staged jar's (6acd289)
- clientside: a dependency the loader calls client-only is a finding (2226261)
- clientside: a verdict names the artifact that actually staged (4bdc748)
- clientside: an
unlessalternative counts when it is bundled, not only provided (e775fbd) - clientside: an exhausted backtrack is nobody's failure, not the host's (6ce930d)
- clientside: an untagged file means Forge only where the facet did not exist (fc7baf3)
- clientside: ask a dead pin once, like a live one (5db90b2)
- clientside: ask CurseForge for the dependency's version line (cf78607)
- clientside: fetch a dependency from the other platform when ours has none (7028c7e)
- clientside: honour Quilt's
unlessclause when staging a dependency (1443d9f) - clientside: honour the range a jar declares, and file a mixin failure as one (2af13e9)
- clientside: judge a demand on the loader's own id (78bebad)
- clientside: keep both disagreement channels, and order the retries in one place (4e70870)
- clientside: prefer a plain build over its own variant (6aeec16)
- clientside: prefer the newest release, then beta, then alpha (eb277c8)
- clientside: re-check a publishable crash on its own era's other loader (17d1f19)
- clientside: reach the fork that serves the original's mod id (6ee12d4)
- clientside: reaching Mojang's rendering layer is client-only evidence (85133ad)
- clientside: read a jar's loader at the descriptor era it was built in (3d61e97)
- clientside: read a line-prefixed version, and stop a dot separating one (551bcb2)
- clientside: read the Connector marker from both TOML descriptors (7e4611e)
- clientside: read the mod's own version, qualifier and all (e35dfcc)
- clientside: refuse a loader that cannot reach the build the jar demands (9a52ef9)
- clientside: resolve a pinned dependency, and stop inventing a
nullone (37e2d27) - clientside: resolve betterquesting, sewingkit and botanypots on CurseForge (bee99ba)
- clientside: resolve botanypots, a slug the guess cannot reach (56cfd7d)
- clientside: resolve the six mod ids observed going unresolved (a237817)
- clientside: verify a Connector placeholder under the loader it really is (971d9e8)
- clientside: verify a mis-ticked jar under the loader it declares (355d322)
- docs: resolve the KDoc links whose targets exist but are unreachable (3e60748)
- docs: stop documenting Confidence, which was deleted (deefe7f)
- grinder: key a verdict on its Minecraft line, not its modloader (cafa60a)
- grinder: link a project only when the scheme is one a browser should follow (a862556)
- grinder: re-file boot artifacts written before the Minecraft line (179bc9c)
- grinder: the Filename column carries the sampled artifact's real name (ab188df)
- plugin-grinder: add the module.md every Dokka task in this module requires (f797481)
VirusTotal
ServerPackCreator-9.0.0-alpha.9.jar- https://www.virustotal.com/gui/file-analysis/YjMyM2RhNTk2YWU1MWRhOWI4MzgxMjQyMDgyYWFkZTQ6MTc4OTQxMjg0NQ==serverpackcreator-api-9.0.0-alpha.9-javadoc.jar- https://www.virustotal.com/gui/file-analysis/ZjQzNDM2ZDZiZWMzMjEyOTBmNmFmMjI4YWQ2MDI2MDQ6MTc4OTQxMjg0Ng==serverpackcreator-api-9.0.0-alpha.9-sources.jar- https://www.virustotal.com/gui/file-analysis/YzZlZGJiOWE5MGQ3MzdiY2M5MGRiNmU2OGFmMTM3NjU6MTc4OTQxMjg0OQ==serverpackcreator-api-9.0.0-alpha.9.jar- https://www.virustotal.com/gui/file-analysis/YzEyYzc5ZjAyNjllOTgwMTQ1ZjMyMjQ0ZjIyMjBhZTA6MTc4OTQxMjg1MQ==serverpackcreator-app-9.0.0-alpha.9-javadoc.jar- https://www.virustotal.com/gui/file-analysis/NzM0OTMxYmZiOTI2ZmI1MjlkNWVhNzZmMjQzZGRlMzA6MTc4OTQxMjg1Mw==serverpackcreator-plugin-example-9.0.0-alpha.9.jar- https://www.virustotal.com/gui/file-analysis/OWNkZDY4MDdkZWZjZGI0ZDE5OTFhZTgyNTY4YzM5NDc6MTc4OTQxMjg1NA==ServerPackCreator-9_0_0-alpha_9-Installer-Linux-amd64.sh- https://www.virustotal.com/gui/file-analysis/YWU5ZjkxMGY0ZTRjMWNiZWM0ZjBlN2JjYTYxODQ1OGI6MTc4OTQxMjg2NA==ServerPackCreator-9_0_0-alpha_9-Installer-Mac.dmg- https://www.virustotal.com/gui/file-analysis/OGY5OTYzNTZhNmU5OWU2MzRlOGFiNGQ5YTkyODRjYjA6MTc4OTQxMjg3NQ==ServerPackCreator-9_0_0-alpha_9-Installer-Windows-x86_64.exe- https://www.virustotal.com/gui/file-analysis/ZjUyODVmNDBiOTZmNGFiZGM4ZDFiYmMxMDY4ZjU0N2U6MTc4OTQxMjg4NQ==
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
3 downloads