MixinBooter
Allows any mixins that work on mods to work effortlessly on 1.8 - 1.12.2
Current Mixin Version: CleanMix 0.2.9 by CleanroomMC, a fork of SpongePowered/Fabric Mixin (0.8.7)
Current MixinExtra Version: 0.5.4
For Developers
- Add CleanroomMC's repository and depend on MixinBooter's maven entry:
repositories {
maven {
url 'https://maven.cleanroommc.com'
}
}
dependencies {
def mixin = 'zone.rong:mixinbooter:11.0'
implementation(mixin) { transitive = false }
annotationProcessor(mixin)
// RetroFuturaGradle-specific setup for refmap generation:
modUtils.enableMixins(mixin)
// modUtils.enableMixins(mixin, 'mod_id.mixins.refmap.json') // Optional: specify a custom refmap name
}- Choose how to register your mixin configurations. Starting from 11.0, the early/late loader distinction is no longer used, so
IEarlyMixinLoader/ILateMixinLoaderare no longer the recommended approach.
- Use
MixinConfigsmanifest attribute Add a space-separated list of mixin configuration files to your jar manifest; MixinBooter will read and register them directly.
jar {
manifest {
attributes(
'MixinConfigs': 'mixins.mymod.json'
)
}
}- Use
MixinConnectormanifest attribute Point it to a class implementingorg.spongepowered.asm.mixin.connect.IMixinConnector. In itsconnect()method, callMixins.addConfiguration(...)to register your configs.
jar {
manifest {
attributes(
'MixinConnector': 'com.example.mymod.MyMixinConnector'
)
}
}public class MyMixinConnector implements IMixinConnector {
@Override
public void connect() {
// You can check whether the mod is loaded with: zone.rong.mixinbooter.service.ModDiscoverer.isModPresent(String modId)
Mixins.addConfiguration("mixins.mymod.json");
}
}Pseudo-Changelog
As of 4.2, MixinBooter's API has changed and all mods that uses mixins are encouraged to depend on MixinBooter, even those that mixin into vanilla/forge/library classes. To avoid mixin version mismatches with mods crashing trying to implement modded mixins (looking at you VanillaFix). Thanks to @embeddedt recommending and helping me introduce this change!
As of 5.0, MixinExtras by @LlamaLad7 is shaded. Available for developers to use.
As of 8.0, MixinBooter will now work from 1.8 - 1.12.2. One single build works with all these versions! (TODO: LiteLoader support?)
As of 8.4, MixinBooter actively attempts to be compatible with SpongeForge
As of 9.2, MixinBooter reinstates the older
@MixinLoaderannotation for 1.8.x usages.As of 10.0, MixinBooter follows Mixin 0.8.7.
As of 11.0, MixinBooter is built on top of CleanMix, as an effort to create an unified backend with Cleanroom:
- No extra
annotationProcessordeclarations are needed in the build script beyond MixinBooter itself - Added
config/mixinbooter.cfgfor mixin config blacklist management and debug options - Added
logs/mixinbooter.log, with ability to trace class-loading for precise debugging - Allows the classic
MixinConfigsandMixinConnectormanifest attribute entries to be fully involved in the ecosystem - Improved mod discovery so mixin ownership is reported more accurately (instead of always
unknown-owner), and betterisModLoadedchecks - Suppresses Forge's corrupt ZIP warnings
- Phased out mixin "phases", so you no longer need to distinguish early/late mixins and handle them separately
- No extra
Before 11.0
Before 11.0, if you wanted to mixin vanilla, Forge, or other classes that are loaded very early by the class loader (for example Guava), refer to the early loader guidance. Starting from 11.0, this is no longer necessary and the related interfaces are deprecated.
- Consult
IEarlyMixinLoaderfor mixins that affects vanilla, forge, or any classes that is passed to the classloader extremely early (e.g. Guava). - Consult
ILateMixinLoaderfor mixins that affects mods. @MixinLoaderannotation is, as of 4.2, deprecated. The functionality is akin toILateMixinLoader.
About log readability
Because of Mixin and Bytecode intricacies, MixinBooter tries to allow both the developers and the users to understand crashes and logs better, but it is still being improved on. Please direct any feedback here!

ZZZank