Releases: FabricMC/fabric-loom
Loom 1.15
- Removed FernFlower decompiler. (modmuss)
- Improve support for remaping directly from official mappings to named mappings without requiring intermediary. (ishland)
- Add
loom.defaultMixinRemapTypeconfiguration option to set the default mixin remap type in unobfuscated versions. (ishland, modmuss50) - Add task to validate mod-provided javadoc. (Juuz)
- Make
useXvfbtask property public and use OS path resolution for xvfb-run executable instead of hardcoded paths. (Silas, modmuss50) - Improved performance when merging Minecraft jars. (modmuss)
- Apply ClassTweaker and injected interfaces asynchronously. (modmuss)
- Minor performance optimisations throughout the codebase. (modmuss)
- Fix remapJar failures in mixed obfuscated/unobfuscated multi-project builds when using
useLegacyMixinAp. (modmuss50) - Fix ModEnigmaTask using intermediary when obfuscation is disabled. (Juuz)
- Fix decompilation for setups using intermediary on Minecraft 26.1 (1.21.4). (ishland)
- Fix IDE import errors when using Gradle's Isolated Projects feature with Loom in a subproject. (Deximus-Maximus)
- Fix transitive access wideners and mod javadoc when using intermediary on unobfuscated Minecraft versions. (ishland)
- Skip Java version check when not remapping. (modmuss50)
- Only apply transitive access wideners and mod javadoc from compile & runtime mods. (modmuss)
- Update Tiny Remapper to latest version. (modmuss)
- Tag commits with version information, (modmuss)
- Various other fixes and improvements.
Loom 1.14
Fabric Loom 1.14
- Initial support for the non-obfuscated versions of Minecraft (modmuss, zOnlyKroks)
- New plugin IDs:
net.fabricmc.fabric-loomto be used for non-obfuscated versionsnet.fabricmc.fabric-loom-remapto be used for obfuscated versions of Minecraftfabric-loomremains to preserve backwards compatibility with existing projects
- Loom now requires Gradle 9.2
- Add
loom.productionNamespaceto better support remapping the non-obfuscated versions. (ishland) - Add utility method for defining an entrypoint with a language adapter in FabricModJsonV1Spec (Ellie-McQuinn)
- Add loom property to disable to automatic remapping of JSR annotations to jetbrains (opekope2)
- Disable jar verification by default as it was making things harder for legacy versions.
While this is only a small change log, a vast amount of work has gone into supporting the new non-obfuscated Minecraft versions. When you use the new plugin ID for non-obfuscated versions, loom will skip configuring everything related to remapping. This provides a significant performance boost and greatly simplifies what loom does removing a lot of edge-case issues related to remapping mods.
In the future we will provide documentation on how to upgrade your build-script and mod to these non-obfuscated versions. This will come after 1.21.11 which we expect to be the last obfuscated version. There is no need to rush or worry about these changes. Future versions of Loom will include further improvements and features to the non-obfuscated versions.
Loom 1.13
- Major improvements to the migrate mappings task
- Mixin support via MercuryMixin
- Improved error handling/reporting
- Register migrate mapping task for each sourceset, e.g
migrateClientMappings - Delete output dir if it already exists
- Add
--overrideInputsIHaveABackupoption that replaces the input files. If you don't have a backup there is no going back.
- Add
migrateClassTweakerMappingsto migrate AccessWidener/ClassTweaker files (Juuz) - Make remapping tasks use the archive file from the Jar API (Juuz)
- Update to mapping-io 0.8.0 (NebelNidas)
Please see the brand new docs page for help with migrating your mappings: https://docs.fabricmc.net/develop/migrating-mappings
Loom 1.12
- Add ability to add and remove annotations via mappings (Earthcomputer)
- Disable the legacy Mixin Annotation Processor by default
- Add task to generate fabric.mod.json files
- Add task for launching Enigma (Juuz)
- Support cross-project classpath groups when using Gradle's configure on demand feature
- Print a warning when the project is stored in OneDrive
- Update unpick to support unpick V4
- Correctly merge differing method/field access permission flags when merging Minecraft jars.
- Remove Guava and Commons IO dependencies
- Add system property to renderdoc tasks
- Fix and test SpecContext always resolving mod dependencies with the runtime attribute.
- Make fabric.mod.json path configurable at configuration stage. (kikugie)
- Replace terminal console appender library with forked fabric-log4j-util.
- Fix CFR decompiler failing on Minecraft c0.30
- Fix invisible log levels being enabled in the log4j config (Juuz)
- Note: The plan is for this to be the last version of Loom to support Gradle 8.x, if you have anything preventing you from updating to Gradle 9 please let me know.
Many other smaller bug fixes and improvements, see: dev/1.11...dev/1.12 for the full list of changes.
Loom 1.11
- Supports Gradle 8.14 and 9.0.
- Requires Java 21, mods can still be compiled for Java 8 and all Minecraft versions.
- Add built-in support for RenderDoc using two new tasks
startRenderDocUI&runClientRenderDoc(Windows & Linux only). - Verify the Minecraft jar signature after downloading.
- Support run configs in folders with the new
ideConfigFolderproperty. - Resolve libraries for all platforms when using Gradle's
--write-verification-metadataoption. See #1286 for details. - Add option to inline refmaps from dependencies before remapping.
- This allows you to see the dependencies Mixin annotations in your own mappings.
- Add option to skip mappings non root methods when using Mojang mappings. See #1258 for details.
- Unpick V3 support
- Unpick remapping
- Add support for specifying custom mappings in remap sources/jar tasks, with the new
customMappingsproperty. - Fix being unable to depend on specific -SNAPSHOT versions of mod dependencies.
- Many other smaller fixes / improvements
Loom 1.10
- Add DSL to configure Fabric API game/client tests
- Production run tasks
- Uses XVFB to allow running the prod client on GitHub actions (no setup required)
- Tracy capture support, generates a tracy profile for the run (bring your own tracy-capture)
- Defaults to running with all mods on the
productionRuntimeModsconfiguration.
- Update to Gradle 8.12
- Download mod source artifacts in parallel
- Add general purpose download task
- Update to latest mapping-io and tiny-remapper
- Linenumber remapper improvements
- Configure compile task mixin options lazily
- Improved decompiler class entry validation
- Fix getCompileRuntimeModsFromRemapConfigs not returning mods that have different versions on the compile/runtime classpath.
- Fix lazily provided layered mappings
- Run library processor for server-only projects for Minecraft versions without bundle metadata
- Create backup jars for legacy merged mapped minecraft providers
- Fix VSC working directory location for sub projects.
- Remove loom bootstrap
Loom 1.9
- Update minimum supported Gradle version to 8.11
- Support Kotlin 2.1+ by using the kotlin-metadata library included with Kotlin 2
- Minimum supported Kotlin version is now 2.0
- Initial support for project isolation and configure on demand
- Injected interfaces and transitive access wideners from other sub projects currently wont be applied.
- Mixin AP mappings from other sub projects wont be used when remapping.
- Expect further work on to be done on this in the future
- Add some Gradle properties to control the decompile cache
- Add option to configure datagen using the client
- Allow datagen tasks to be skipped when up to date (depends on a FAPI change) and run in parallel.
- A handful of smaller bug fixes
Loom 1.8
- Configuration cache support (modmuss50)
- Remove the advanced multi project optimisation option, it only provided a small benefit to specific projects and is fundamentally incompatible with config cache.
- Gen sources task no longer rebuilds the input jar, now uses a pre cached input jar
- RISC-V Linux support (modmuss50)
- Update to Gradle 8.10 (modmuss50)
- Add hash suffix to custom intermediaries (Wyvest)
- Fix inner class detection in JarWalker, for older Minecraft versions (SpaceWalkerRS)
- Use Minecraft manifest name in file name instead of url hash (SpaceWalkerRS)
- Fix conflicts caused by
MappingsMergerwhen used with pre-1.3 Minecraft (SpaceWalkerRS) - Fix a an edge case issue with generic injected interfaces (FirstMegaGame4)
- Setup the test sourceset better when using split sources. (modmuss50)
- Include dev jars from other projects in classpath groups (Juuxel)
- Many other smaller fixes and changes
Configuration cache is an opt-in Gradle feature that will be enabled by default in Gradle 9, this version of Loom contains full support for it. This is something I have been working towards supporting for sometime. For now I would only recommend Gradle veterans try it out, as it imposes a range of restrictions on how your build script is setup. Unfortunately in my limited testing the performance improvements are minimal for Fabric projects, so don't feel like you are missing out if you don't enable it just yet.
Loom 1.7
- Update to Gradle 8.8
- Workaround a Java bug causing the closed zip file system errors
- Add manifest entry allowing deps to define known bsms
- Make Vineflower the default decompiler
- Improve error message when failing to parse FMJ json files
- Improve the code behind
include - Improvements to the decompiler cache
- Fix Mojang mappings with noIntermediateMappings
- More work towards Gradle configuration caching support, full support to come later
- Misc smaller fixes/improvements
Loom 1.6
- Decompiler cache
- Generics support for injected interfaces
- Support merging pre 1.3 Minecraft versions
- Refactor/improve kotlin metadata remapping
- Print info about locked files during configuration or genSources
- Improve locking strategy for concurrent loom executions
- Update to Gradle 8.6
- Async line number remapping
- Prepare for SelfResolvingDependency's removal
- Fallback to maven central for artifacts such as sources or javadocs that are not mirrored on Mojang's repo
- Introduce SemVer version parsing for included mods/libraries
- Download intermediary using Gradle
- Add API to get named minecraft jars
- Add RemapJarTask.getOptimizeFabricModJson (disabled by default)
- Prevent Gradle from running vscode task asynchronously
- Add classname to stracktrace when Kotlin remapping fails
- Fix datagen run config having incorrect name
- Don't fail setup if a project fabric.mod.json file is invalid
- Fix idea sync task group
- Only set startFirstThread on versions using LWJGL 3
- Add interface injection unit test
- Add Offline mode / locking test
- Fix possible race condition in PrepareJarRemapTask when using MPO
- Refactor MinecraftJarConfiguration and MinecraftMetadataProvider
Generated/detailed changelog
- Remapper extension improvements by @modmuss50 in #1024
- Prepare for SelfResolvingDependency's removal & Update to Gradle 8.6 by @modmuss50 in #1038
- Improve locking strategy for concurrent loom executions by @jpenilla in #1031
- Download intermediary using Gradle by @jpenilla in #1042
- Add interface injection unit test by @modmuss50 in #1052
- Add Offline mode / locking test by @modmuss50 in #1046
- Print info about process lock owner by @jpenilla in #1040
- Update deps by @modmuss50 in #1054
- Injected Interfaces Expansion => Generics Support by @FirstMegaGame4 in #1050
- Refactor/better kotlin metadata by @LlamaLad7 in #1061
- Add API to get named minecraft jars. by @modmuss50 in #1063
- Check Minecraft java version by @modmuss50 in #1059
- Use last 16 chars for checksum by @Flemmli97 in #1064
- Cleanup MinecraftJarConfiguration by @modmuss50 in #1070
- Refactor MinecraftMetadataProvider to create it earlier by @modmuss50 in #1072
- Print info about locked files during configuration or genSources by @modmuss50 in #1066
- Fix possible race condition in PrepareJarRemapTask by @modmuss50 in #1065
- Optimise fabric.mod.json files by @modmuss50 in #1068
- Experimental Decompiler cache by @modmuss50 in #1043
- Async line number remapping by @modmuss50 in #1074
- Support merging pre 1.3 Minecraft versions. by @SpaceWalkerRS in #1026
- Only set startFirstThread on versions using LWJGL 3 by @modmuss50 in #1076
- Introduce SemVer version parsing to included mods/libraries by @onebeastchris in #1075
New Contributors
- @FirstMegaGame4 made their first contribution in #1050
- @LlamaLad7 made their first contribution in #1061
- @Flemmli97 made their first contribution in #1064
- @SpaceWalkerRS made their first contribution in #1026
- @onebeastchris made their first contribution in #1075
Full Changelog: 1.5...1.6