In the ecosystem of Minecraft modding, few files are as critical to a mod’s identity as mods.toml . This metadata file, placed inside a mod’s JAR, acts as its passport, telling the game loader who the mod is, what version it needs, and—most critically— how it should be loaded. For mods built on Neoforge, a successor to the legacy Forge API, one line in this file has become a subtle but important source of confusion and precision: modloader . The choice between specifying modloader="neoforge" or modloader="javafml" is not arbitrary; it defines the mod’s technical lineage, its compatibility, and its place in the evolving history of Minecraft modding.
NeoForge was born as a fork of Minecraft Forge, inheriting many of its foundational systems. The javafml loader is the default mechanism that looks for the @Mod annotation in your Java classes. neoforge mods.toml modloader value neoforge or javafml
Thus, the modloader="neoforge" value was introduced. When Neoforge encounters this flag in a mods.toml , it knows that the mod expects the new, often stricter loading environment. This includes updated classloading mechanics, different handling of mixins, and potentially exclusive access to newer APIs that are not present in legacy Forge. More importantly, this flag acts as a compatibility lock: a mod declaring neoforge will not load under legacy Forge (and vice versa, a javafml mod may run on Neoforge only in a compatibility fallback mode, but with warnings). For mod developers, using neoforge signals a deliberate decision to cut ties with the past and embrace the future of the fork. It allows them to use Neoforge-exclusive features, shed deprecated code, and assume a cleaner, more predictable runtime. In the ecosystem of Minecraft modding, few files
: This is the standard value for most developers. It tells NeoForge that your mod is written in Java and uses the @Mod annotation to define its entry point. Thus, the modloader="neoforge" value was introduced