The public bertie monorepo contains the modpack,
its custom mods, shared build logic and test infrastructure. A few related projects remain
separate because they have a different lifecycle or licensing boundary.
- The product monorepo targets Minecraft 1.21.1 / NeoForge 21.1.x only. Exact loader and build-tool versions are pinned centrally. Ports to other Minecraft versions or to Fabric are out of scope and will be closed.
- Several mods are written for the pack and assume its mod list is present. They are not guaranteed to be useful standalone. Each README says which.
Open an issue using the Bug report or Crash report template. A report is only actionable with:
- the mod version (from the jar filename or
mods.toml), - the NeoForge version,
- whether you are running the bertie pack or your own,
- the full log —
logs/latest.logor the crash report, as a gist or attachment, not a screenshot of a fragment.
"It crashed" without a log cannot be diagnosed and will be closed.
PRs are welcome but please open an issue first for anything beyond a typo or an obvious one-line fix — the modules are tightly coupled to ongoing pack integration, and a change that looks harmless can conflict with progression work already in flight.
- Keep the diff to one concern.
- Match the surrounding code style; there is no formatter to run.
- Run the smallest relevant root Gradle build and test tasks. CI runs the corresponding checks on every PR.
- Do not commit third-party jars. Compile dependencies are resolved from public mavens (Modrinth, NeoForged, Architectury, FTB).
Conventional Commits — feat:, fix:, docs:, ci:, chore:, refactor:.
The scope is optional: fix(forge): ….
- Update the selected component's version.
- Run its build and relevant test suites at the exact commit to be released.
- Create the manual release with a
subject/vX.Y.Ztag, for exampleprimitive-refined/v0.3.0orpack/v0.2.0.
Release jobs consume artifacts built from that commit. The pack references released JARs; never make a hand-built local JAR part of the pack source.
Components that are entirely our own work are released into the public domain under The Unlicense. Ports keep the upstream licence with attribution — check the licence beside the component before assuming that a repository-wide default applies.