Fabricated 0.6.0-beta.2 for Forge 26.2
Curse Maven Snippet
What's new
Beta. Fabricated runs Fabric mods on NeoForge and Forge. Many Fabric mods work; some still don't. Back up your worlds.
The second beta adds Minecraft 1.21.1 on Forge (Forge 52), held to the same bar as every other platform, and runs one test suite on every loader and Minecraft version. It fixes what Fabric mods with deep hooks met on Forge, and its jars are uploaded to CurseForge too. It covers NeoForge (1.21.1, 1.21.11, 26.1.2, 26.2, 26.3), Forge 61 to 66 (1.21.11, 26.1.2, 26.2, 26.3), Forge 52 (1.21.1) and Forge 47 (1.20.1).
Highlights
- Minecraft 1.21.1 on Forge. Forge 52 joins Forge 47 on
forge-legacy, with the gates and refusals the other Forge versions have: the server and the client with Fabric API and the renderer API test mod, Fabric's renderer API through Indigo, the Fabric builds of Sodium and Iris, malilib's set, Essential and Flashback. Most of its code is Forge 47's or Forge 61's, shared rather than copied. - One test suite everywhere. Every loader runs the same test mods for its Minecraft version, through one CI
workflow and harness; a check a platform can't pass is listed in
ci/checks.tsvwith the reason. - Fabric mods with deep hooks on Forge. The advanced corpus (world generation, gameplay systems, replays, server tools) now runs on every Forge version. What it and the main corpus met there is fixed, for Origins, FrozenLib, ReplayMod, Carpet, Cobblemon, BetterEnd, BetterNether, BCLib, WorldWeaver, Moonlight, Friends and Foes, Lithium, MoreCulling, Balm, YUNG's Extras with Biomes O' Plenty, Debugify, ShulkerBoxTooltip and Emotecraft, but for Wover Story on Forge 66 (REG-13).
- A startup and memory benchmark in CI. Each version's server measures what Fabricated's discovery allocates (in a first launch and, on NeoForge, a cached one) and the live heap once started; a metric more than 10% over its recorded baseline fails the change unless it records the new value with its reason. Discovery's log line and the report's Launch timings now say what the JVM allocated too.
- Every jar named alike, on GitHub and CurseForge. Each jar is
fabricated-<loader>-<version>+mc<minecraft>.jar, with the full version; the NeoForge jar wasfabricated-0.6.0+mc<minecraft>.jar. The release uploads exactly the jars its full matrix tested.
What changed on every platform
- Pre-flight judges more of what Mixin does: the mixin configs a mod's code adds by name are checked as listed ones
(MIXCFG-1); an injector selecting every method of its target (WILD-1), or naming several methods of which another
mod's mixin adds the one that exists (PRE-23), is judged as Mixin judges it; a hook at every match of a call or field
access that the platform's patch repeats on the same path is pinned to vanilla's one (VANILLA-4); an injector into an
override the platform moved to an overload follows it there (PRE-24); a
@ModifyVariablewhose ordinal is past the locals Mixin can see gets vanilla's local's ordinal where vanilla's code tells, and otherwise fails pre-flight instead of the launch (PRE-25); and a mixin config asking for a Java level above the game's is lowered to it (LEVEL-2). - Lithium's Fabric build: pre-flight leaves out its mixin replacing the platform's map of point-of-interest states with a copy, which left types registered later unknown to the game (on Forge, and on NeoForge a NeoForge mod's); Lithium loses only that optimization (POI-2).
- Security and robustness review: a class claiming a huge attribute disables its mod instead of stopping discovery where the platform runs ASM 9.8 or older, as NeoForge 1.21.11 does (SEC-6); an action waiting for the entrypoints that throws stops no other (SEC-7); the test that keeps Fabricated off the network also sees method references and class literals (SEC-8); a directory entry a jar repeats with no content is accepted (SEC-11, ReplayMod 1.20.1); and on Forge, Fabricated's language provider is no longer deleted from the cache every seventh launch (CACHE-4).
What changed on NeoForge
- Fabric API's armour renderers run on 1.21.1 (ARMOR-1): their hook is at the start of a method NeoForge deprecated for an overload, and moves to the overload. Figura's hooks there move too, so it loads on 1.21.1's advanced client (PRE-20).
- A Fabric jar with a module descriptor (
module-info.class) could stop every mod loading; the descriptor is left out, as Fabric's class path ignores it (SEC-10).
What changed on Forge 61 to 66
- The
/fabricatedcommand, and Fabric mods' plugins for recipe viewers, tooltip mods and Simple Voice Chat, work on Forge: CI checks WTHIT's and Simple Voice Chat's Forge builds; JEI, REI and Jade have none for these versions. - Biomes: a Fabric mod changing a biome's weather no longer stops the server (BIOME-3); on Forge 66 a mob spawn
added through
BiomeModificationsreaches the biome (BIOME-4); and a Fabric jar's own Forge biome modifiers are turned off, as on NeoForge, so its features don't go in twice (MODIFIER-2, MODIFIER-3, every Forge version). - A Fabric mod built for a newer Java than the game's is disabled, with the Java it needs, where it would have stopped the launch (JAVA-1: Ledger's Java 21 build on Forge 47's Java 17).
- What the corpora met: FrozenLib's enum shadow (ENUM-8) and pack sources (PACK-11), ReplayMod's added configs,
which stopped the client at launch (LOADER-6), constructor hooks of FrozenLib, ImmediatelyFast and Wover (CTOR-7),
Debugify (PRE-21), ShulkerBoxTooltip (PRE-22), Emotecraft (PRE-23), the Guava Fabric's Mixin carries, which BetterEnd,
BetterNether, BCLib and Wover name (LIB-3), Friends and Foes and Moonlight mapping points of interest (POI-3), a
registry value a mod changes after registering it (REG-14), another mod's accessor of a field Forge retypes (ACC-6),
and a Fabric jar whose
mods.tomlonly asks for Sinytra Connector (MULTI-2). - A Fabric mod replacing the server's player list no longer leaves the server seeing no player (POLY-2), and with the Fabric build of Sodium on Forge 64 to 66 a Fabric model that throws no longer leaves its transforms on Sodium's emitter (FRAPI-12).
- Fabricated's API answers
fabricApiModule(id)for every installed Fabric API module, not only those the version's plan lists (API-2).
Forge 52 (Minecraft 1.21.1), new
- What it is: Forge 52 (CI tests 52.1.21) runs the game in Mojang's names, with Forge 61's module stack and Mixin
0.8.7 and Forge 47's EventBus 6. Fabric mods are remapped from Intermediary, as on NeoForge 1.21.1, and Fabricated
nests MixinExtras 0.5.5 for them. Its jar comes from
forge-legacy, beside Forge 47's. - Forge 47's and Forge 61's bridges: Fabric's item API through Forge's item hooks (ITEM-1), attack and use callbacks through Forge's events (INTERACT-1), fuels (FUEL-2), screen mouse events (LAMBDA-10), Forge Config API Port's Forge half (CFG-4), stable registry data in Fabric mods' packs (PACK-10), Fabric's renderer API (FRAPI-11), Fabric mods' own model loaders (MODEL-5), ingredients on the network (NET-13), Porting Lib's drop capture (DROP-1) and accessors of fields Forge 52 replaced (ACC-5).
- Also fixed there: pack metadata (PACK-8), biome weather (BIOME-5), Forge's channel list (NET-12), data pack registries (REG-12), packs enabled by default (PACK-9), colour providers (COLOR-3) and lava (FLUID-4).
- The difficult mods and the corpora: the Fabric build of Iris (IRIS-2) beside Sodium's, MoreCulling (SUPER-2), Balm (WILD-1), Cobblemon (PRE-28), Apoli's HUD layers (HUD-6, VANILLA-4), Moonlight with Amendments (REG-14), Wover (ACC-6, LIB-3), YUNG's Extras with Biomes O' Plenty (MODIFIER-2), and Friends and Foes (POI-3). Locally, the advanced corpus's server starts and its client joins its world.
What changed on Forge 47 (1.20.1)
- A mixin config asking for Java 21 no longer stops the launch for every mod (LEVEL-2).
- Registries: a Fabric mod's hook into the registries' freeze waits for the main entrypoints, as on Fabric (REG-9);
registry writes from
RegistryDataLoader's class initializer, as Wover's, are taken (REG-10); a data pack registry outside theminecraftnamespace loads its entries (REG-11); with Forgified Fabric API, a registry a Fabric mod builds joins the game, and so does a data pack registry it makes (PROVIDER-20, PROVIDER-21). - Pack sources: Forgified Fabric API, or a mod adding a pack source the vanilla way (FrozenLib), no longer stops the server (PACK-7). A Fabric mod replacing the player list no longer hides the player (POLY-3).
- What the advanced corpus met: Origins 1.10.2's jar, with Connector's placeholder
mods.toml, loads as the Fabric mod it is (MULTI-2), with its nested MixinExtras (PLAT-7) and Apoli's tool check (PRE-25); Carpet, and five mods' dimension change hooks (PRE-24); FrozenLib's gravity hook (PRE-26); ReplayMod 1.20.1 (MIXCFG-1, SEC-11); Bobby's accessors of record components, which Forge 47's names tell apart where Intermediary doesn't (REMAP-5); BCLib's and BetterEnd's biome settings, as Forge 47 now opens what Fabric API's biome and particle modules open on Fabric (BIOME-6); and BCLib's workstation states, which it stores in the point-of-interest map as vanilla's holders where Forge 47 keeps the types (POI-4). REG-14's, MODIFIER-3's and JAVA-1's fixes apply here too. - The
/fabricatedcommand and Fabric mods' plugins work, CI checking all five plugin hosts.
Fabric's renderer API, by platform
| NeoForge | Forge 61 to 66 | Forge 52 | Forge 47 | |
|---|---|---|---|---|
| Fabric block models in chunk sections, moving blocks, breaking overlay | yes, every version | yes, every version | yes, through Indigo (FRAPI-11) | yes |
| Fabric item models | yes, every version | yes | yes | yes |
| Blocks drawn as entities | yes on 26.x; 1.21.11 from the parts; 1.21.1 vanilla's quads, as upstream | yes | not checked in CI | vanilla's quads, as upstream on 1.20.1 |
| A throwing model drawn by the platform from then on | yes, every seam | yes, at Indigo's entry points | yes | yes |
| Another registered renderer (Sodium's, Forgified Fabric API's) | yes: Fabricated's seams stand down | Sodium's | Sodium's | Sodium's, with Indium |
Support matrix
| Loader | Minecraft | Loader versions the jar requires | CI tests on | Status |
|---|---|---|---|---|
| NeoForge | 1.21.1 | [21.1,21.2) |
NeoForge 21.1.265, Fabric API 0.116.17 | Beta |
| NeoForge | 1.21.11 | [21.11,21.12) |
NeoForge 21.11.45, Fabric API 0.141.6 | Beta |
| NeoForge | 26.1.2 | [26.1.2,26.1.3) |
NeoForge 26.1.2.116, Fabric API 0.155.3 | Beta |
| NeoForge | 26.2 | [26.2,26.3) |
NeoForge 26.2.0.90, Fabric API 0.161.0 | Beta |
| NeoForge | 26.3 | [26.3,26.4) |
NeoForge 26.3.0.95, Fabric API 0.164.0 | Beta |
| Forge 47 | 1.20.1 | [47,) |
Forge 47.4.28, Fabric API 0.92.12 | Beta |
| Forge 52 | 1.21.1 | [52,) |
Forge 52.1.21, Fabric API 0.116.17 | Beta, new |
| Forge 61 | 1.21.11 | [61,) |
Forge 61.2.4, Fabric API 0.141.6 | Beta |
| Forge 64 | 26.1.2 | [64,) |
Forge 64.1.5, Fabric API 0.155.3 | Beta |
| Forge 65 | 26.2 | [65,) |
Forge 65.1.5, Fabric API 0.161.0 | Beta |
| Forge 66 | 26.3 | [66,) |
Forge 66.1.0, Fabric API 0.164.0 | Beta |
Each jar also requires its Minecraft version, as the support matrix lists; CI tests the builds named.
What CI gates on each, as ci/runs.tsv sets it (a gate fails the release's full matrix; an informational run only
reports):
| CI run | NeoForge | Forge 61 to 66 | Forge 52 | Forge 47 |
|---|---|---|---|---|
| The test mods, server and client, with Fabric API and the renderer API test mod (on NeoForge also without Fabric API) | gate | gate | gate | gate |
| Stand-ins for mods bringing Fabric API's modules; the refusals | gate | gate | gate | gate |
| A mixin that fails as Mixin applies it, over three launches (APPLY-1) | gate | not run | not run | not run |
| The platform's builds of the plugin hosts, calling the test mod's plugins | gate: JEI, REI, Jade, WTHIT (not 26.3), Simple Voice Chat | gate: WTHIT, Simple Voice Chat | gate: JEI, WTHIT, Simple Voice Chat | gate: all five |
| Forgified Fabric API | gate where it has a build: the server; 1.21.1's client with Sodium; its renderer on 1.21.1, 26.1.2 and 26.2 | no Forge build | no Forge build | gate: server and client |
| Sodium and Iris for the platform | gate: Sodium on 1.21.1 (with Forgified Fabric API) and 1.21.11; both on 26.x, with and without a shader pack | no Forge builds | no Forge builds | no Forge builds |
| The Fabric builds of Sodium and Iris | gate, with and without a shader pack | gate | gate | gate: Sodium 0.5 with Indium, and Iris |
| Sodium Extra and Reese's Sodium Options beside Sodium for NeoForge | gate on 26.1.2 and 26.2; informational on 26.3 | — | — | — |
| Continuity; OneConfig and PolyPlus | gate | not run | not run | not run |
| malilib with MiniHUD, Tweakeroo and Litematica; Essential; Flashback | gate | gate | gate | gate (Flashback has no 1.20.1 build) |
| Popular Fabric mods, the main and the advanced corpus | informational | informational | informational | informational |
| The newest loader build | informational | not run | not run | not run |
Every feature on every version, with its gaps, is in the support matrix.
Upgrading from v0.6.0-beta
- Remove the old jar. The NeoForge jar is renamed, from
fabricated-0.6.0+mc<minecraft>.jartofabricated-neoforge-0.6.0-beta.2+mc<minecraft>.jar, so the new one doesn't replace it, and two Fabricated jars are refused. Forge's goes fromfabricated-forge-0.6.0+mc<minecraft>.jartofabricated-forge-0.6.0-beta.2+mc<minecraft>.jar. - The first launch is slower. What v0.6.0-beta cached is translated again, once, automatically, as a build's
translations are keyed by that build (CACHE-2). Nothing in
.fabricated/cacheneeds deleting. config/fabricated.jsoncarries over: no setting changed.- The developer API is still 1.1. On Forge,
fabricApiModule(id)now answers for modules it read as absent (API-2).
Known limits
- Not every run is a gate (the table above). The corpora are informational: on NeoForge 1.21.1, and locally on
Forge 52, the advanced client stays on Origins' origin screen, which waits for a player (CORPUS-66), and the advanced
server's
/reloadcheck fails in WorldWeaver's code, as on Fabric (CORPUS-113); with Polymer, Forge 66's advanced server fails two ingredient network checks that write outside a packet, as on Fabric (CORPUS-114). Sodium Extra's and Reese's Sodium Options' 26.3 builds ask for a newer Sodium than CI pins. - Two equal registry entries on Forge (REG-13). Forge's registries find a value by its equality, so two equal entries are taken for one: Wover Story registers two point-of-interest types that are equal records, and its main entrypoint fails on Forge 66 (the advanced corpus runs disable it). A mod registering two equal records fails the same way on every Forge version. There is no generic fix; the fix is the mod's or Forge's.
- On Forge 47, with the advanced corpus' mods together: in one of two local runs a client joining its world was
dropped, as Polymer's early handshake let it send a custom payload before Fabric API 0.92's networking was ready for
the player. That race is in those mods' code, which Fabric 1.20.1 runs alike (NET-14, read in the jars). BCLib's loot
tables built in code aren't built, as it calls a
LootPoolconstructor Forge 47 replaced (LOOT-3; BCLib logs it). - Fabric HUD layers added in
Gui's constructor on NeoForge 1.21.1 (HUD-7). NeoForge 21.1 builds the HUD another way, so such a hook is left out: the game runs, but Apoli's resource bars (Origins 1.13) aren't drawn. Forge 52 draws such layers (HUD-6). - On Forge 52 Forgified Fabric API doesn't run (its 1.21.1 builds are NeoForge's, and a jar with its own copy of Fabric Loader is refused), and REI and Jade have no Forge builds to check their plugins with. Not checked there yet: a Fabric mod's potion recipe brewed, a Fabric resource condition named in Forge's recipe condition (CI-8), Fabric API's armour renderers, and Fabric models in blocks drawn as entities.
- What Forge lacks is under
Unsupported on Forge
in
COMPATIBILITY.md: some item API, content registry, lifecycle, object builder, registry sync, fluid rendering and sound hooks, and other mods' hooks inside the HUD method. Some Fabric mods' hooks have no place in Forge's code and stay left out, the report naming each: Forge 47's structure entity processing, Forge 64 to 66's screen render wrappers, piston stickiness, block breaking wrappers, and item checks Forge asks its extensions. Fabricated has no bridge between Team Reborn's energy and Forge's. - Iris's Fabric build on NeoForge 1.21.1: pre-flight leaves out its redirect of the particle engine's draw, where NeoForge calls an overload; what Iris loses is unchecked (IRIS-3).
- Essential's second launch on Forge 66 hung once after creating its window, and passed when run again (HANG-1, cause unknown).
- With Forgified Fabric API, its modules are used as they are. What they do differently is theirs: its networking
refuses a payload in the
minecraftnamespace (PROVIDER-5), and on 26.x its item API can stop the game asked an equipment slot the Fabric way (PROVIDER-7). On NeoForge 1.21.11 and 26.x, Fabricated keeps a copy of its nested Forgified Fabric Loader without Fabric Loader's API (up to 64 MiB) in.fabricated/loader-api, and an update of the jar leaves the old copy there (CACHE-5). - OneConfig's keybinds can't reach
KeyMapping.MAP, which NeoForge retyped; OneConfig warns that its keybinds may shadow Minecraft's (KEYMAP-1). - Login queries (
ServerLoginNetworking,ClientLoginNetworking) aren't supported on NeoForge, which has no hook for that phase; on Forge upstream's module loads, unchecked. - A Fabric mod whose initializer fails after setting up a server configuration task can leave a singleplayer join waiting (ENTRY-1, not seen with a real mod).
- Multiplayer: CI tests dedicated servers and singleplayer clients, not a client joining a dedicated server.
Details for every item are in
docs/CHANGELOG.md, every fixed finding in
docs/FINDINGS.md, the open ones in
docs/roadmap.md, and per-module
status in docs/COMPATIBILITY.md.
Installing
- Install NeoForge or Forge for your exact Minecraft version.
- Download the jar for your loader and Minecraft version, from this release or from CurseForge, where each is shown as
Fabricated 0.6.0-beta.2 for NeoForge 26.3 (or for Forge 1.21.1, and so on):
- NeoForge (1.21.1, 1.21.11, 26.1.2, 26.2, 26.3):
fabricated-neoforge-0.6.0-beta.2+mc<minecraft>.jar, such asfabricated-neoforge-0.6.0-beta.2+mc26.3.jar. - Forge:
fabricated-forge-0.6.0-beta.2+mc<minecraft>.jar, for 1.21.11, 26.1.2, 26.2 and 26.3 on Forge 61 to 66, 1.21.1 on Forge 52 and 1.20.1 on Forge 47, such asfabricated-forge-0.6.0-beta.2+mc1.21.1.jar.
- NeoForge (1.21.1, 1.21.11, 26.1.2, 26.2, 26.3):
- Check the jar against
SHA256SUMS.txt. - Put the jar in
mods, next to your Fabric mods and the official Fabric API jar for that version (or Forgified Fabric API where it runs, on NeoForge and Forge 47, whose modules Fabricated then uses). Remove Sinytra Connector, and any older Fabricated jar.
Fabricated never downloads anything and never modifies your mod jars. logs/fabric-bridge-report.txt says what loaded
and why anything didn't.
If you hit a crash, please open an issue and attach logs/latest.log and logs/fabric-bridge-report.txt.
Builds
Tested by the full matrix and built by the release workflow:
- NeoForge, from
mainat07bca47d5d:fabricated-neoforge-0.6.0-beta.2+mc1.21.1.jar,fabricated-neoforge-0.6.0-beta.2+mc1.21.11.jar,fabricated-neoforge-0.6.0-beta.2+mc26.1.2.jar,fabricated-neoforge-0.6.0-beta.2+mc26.2.jar,fabricated-neoforge-0.6.0-beta.2+mc26.3.jar - Forge, from
forgeatff235f328a:fabricated-forge-0.6.0-beta.2+mc1.21.11.jar,fabricated-forge-0.6.0-beta.2+mc26.1.2.jar,fabricated-forge-0.6.0-beta.2+mc26.2.jar,fabricated-forge-0.6.0-beta.2+mc26.3.jar - Legacy Forge, from
forge-legacyatae2a95b458:fabricated-forge-0.6.0-beta.2+mc1.20.1.jar,fabricated-forge-0.6.0-beta.2+mc1.21.1.jar
SHA-256 (also in SHA256SUMS.txt):
5c0c15cf0c28939738684004a42d1f2f81e84e42ee9cae1117e8ff645ffa2ca6 fabricated-forge-0.6.0-beta.2+mc1.20.1.jar
a0fc92d38179622494c766f3e6f32304344ae93d45fd8cbedec381fc26569d2c fabricated-forge-0.6.0-beta.2+mc1.21.1.jar
7d9bc0d65f7f26bbe9897e052827bda4ff22eef4bf6a0638ffa8bb3d26e4b6fc fabricated-forge-0.6.0-beta.2+mc1.21.11.jar
601085fc42042623f06503ce7a5d8879daf9404a7641a94097d5a7e8d191d2d7 fabricated-forge-0.6.0-beta.2+mc26.1.2.jar
f2fd35a597e56c28b4b485e7f3be5e52b6af7f9b110f62ab87f8c7da00bad5ac fabricated-forge-0.6.0-beta.2+mc26.2.jar
841cba474c1fe9918e1152dd3e0f0323789759afa46c6e6f6bf65dd121a13ed6 fabricated-forge-0.6.0-beta.2+mc26.3.jar
77c001cfabb1243372ba18b357eec09c6622b59d9c47724965a8800bece29973 fabricated-neoforge-0.6.0-beta.2+mc1.21.1.jar
cb22a9aed826e6e2ae8ac983eb8a6451c40c37e8c9f6296785a59076384d1e0e fabricated-neoforge-0.6.0-beta.2+mc1.21.11.jar
ec40a24a913599fdb98f9dad3b119c2eeea73e080b50b84f58dafc5963bad92a fabricated-neoforge-0.6.0-beta.2+mc26.1.2.jar
101c1600aa97a3ba324907f0cdf217aba9d61482fddafff77981a6566148d2da fabricated-neoforge-0.6.0-beta.2+mc26.2.jar
79f7cde358cc25dbb48360eb486c999f6bfe02d75fb0442efe1482725949f9f0 fabricated-neoforge-0.6.0-beta.2+mc26.3.jar
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include

