Skip to content

Instantly share code, notes, and snippets.

@thecatcore
Last active March 8, 2026 22:53
Show Gist options
  • Select an option

  • Save thecatcore/ab7725ef6e2aa84706ad2a2596b5c816 to your computer and use it in GitHub Desktop.

Select an option

Save thecatcore/ab7725ef6e2aa84706ad2a2596b5c816 to your computer and use it in GitHub Desktop.

Migrating from Legacy Fabric to Ornithe gen2

Updating Loom and Legacy Looming

Before we begin, you should make sure you are using the latest version of Loom and Legacy Looming. At the time this was written, it is 1.15.

If the version in your workspace is older, it is recommended to upgrade to the latest one. However, this might require upgrading other parts of the tooling, such as Gradle, to get it working.

To avoid most issues, you can rely on the example mod repo as a recommended workspace setup.


2 Common Migration Paths

There are two common migration paths depending on your setup, mainly based on which mappings you use.

Your workspace uses Legacy Yarn (the default setup)

Upgrading to the latest Legacy Yarn build

If your workspace uses a build of Legacy Yarn other than 604, you should upgrade to it, as it is the last version. To do that, use the migrate mappings tasks of Loom with the following mappings source:

net.legacyfabric:yarn:<minecraft_version>+build.604:v2

Once you are done with the upgrade, you can update the mappings build to 604 in your build script (build.gradle, gradle.properties).

Migrating from Legacy Looming to Ploceus

settings.gradle

First of all, update the plugin repository list in your settings.gradle.

		maven {
-			name = "legacy-fabric"
-			url = "https://maven.legacyfabric.net/"
+			name = 'Ornithe Releases'
+			url = 'https://maven.ornithemc.net/releases'
+		}
+		maven {
+			name = 'Ornithe Snapshots'
+			url = 'https://maven.ornithemc.net/snapshots'
		}

build.gradle

Replace Legacy Looming with Ploceus.

plugins {
	id "net.fabricmc.fabric-loom-remap" version "${loom_version}"
-	id "legacy-looming" version "${loom_version}" // Version must be the same as fabric-loom's
+	id "ploceus" version "${loom_version}" // Version must be the same as fabric-loom's
	id "maven-publish"
}

Replace the Legacy Looming block with the Ploceus one, and configure the intermediary generation.

-legacyLooming {
-	// 	The generation of intermediary to use, default is 1.
-	// 	legacy.yarn() will automatically point at the variant for the set intermediary generation.
-	// 	However do not forget to set the right build number of legacy yarn as they are different per variant.
-	//	intermediaryVersion = 2
-
-	// 	Whether to use Legacy Fabric intermediaries or upstream/official FabricMC ones.
-	//	Default to true: use Legacy Fabric intermediaries.
-	// 	If set to false, don't forget to also set intermediaryVersion to generation 2.
-	//	useLFIntermediary.set(false)
+ploceus {
+	setIntermediaryGeneration(2)
}

Add the Legacy Fabric Maven repository to the dependencies repository list.

repositories {
	// Add repositories to retrieve artifacts from here.
	// You should only use this when depending on other mods because
	// Loom automatically adds the essential Maven repositories to download Minecraft and libraries.
	// See https://docs.gradle.org/current/userguide/declaring_repositories.html
	// for more information about repositories.
+	maven {
+		name = "legacy-fabric"
+		url = "https://maven.legacyfabric.net/"
+	}
}

Update the mappings to the Ornithe port of Legacy Yarn.

dependencies {
	...
-	mappings(legacy.yarn(project.minecraft_version, project.yarn_build))
+	mappings "net.legacyfabric:legacy-yarn:${project.minecraft_version}+build.2:v2"
	...
}

Update the Legacy Fabric API dependency to point to the Ornithe port, add OSL to the workspace, and remove explicit dependencies that are now provided by default in all versions by Ornithe, such as Gson.

dependencies {
	...
-	// Legacy Fabric API provides hooks for events, item registration, and more. As most mods will need this, it's included by default.
-	// If you know for a fact you don't, it can be safely removed.
-	// As of September 2025, available only for intermediary generation 1.
-	// Check availability for your MC version at https://legacyfabric.net/usage.html
-	modImplementation "net.legacyfabric.legacy-fabric-api:legacy-fabric-api:${project.fabric_version}"

+	ploceus.dependOsl(project.osl_version)
+	modImplementation "net.legacyfabric.ornithed.legacy-fabric-api:legacy-fabric-api:${project.legacy_fabric_version}"

-	// If you use LFAPI with MC 1.3.2, 1.4.7 or 1.5.2, uncomment the next line
-	// implementation('com.google.code.gson:gson:2.8.9')
-
-	// You can retrieve a specific API module using this notation.
-	// modImplementation(legacy.apiModule("legacy-fabric-item-groups-v1", project.fabric_version))
	...
}

gradle.properties

Example update:

# Done to increase the memory available to Gradle.
org.gradle.jvmargs=-Xmx1G
org.gradle.parallel=true

# Fabric Properties
# More versions available at: https://legacyfabric.net/usage.html
minecraft_version=1.8.9
-yarn_build=604
+feather_build=1
loader_version=0.18.3
loom_version=1.15-SNAPSHOT

# Mod Properties
mod_version=1.0.0
maven_group=net.legacyfabric
archives_base_name=legacy-fabric-example-mod

# Dependencies
+# OSL
+osl_version=0.17.1
# Legacy Fabric API
-# Check availability for your MC version at https://legacyfabric.net/usage.html
-fabric_version=1.13.2+1.8.9
+# Check availability for your MC version on [Modrinth](https://modrinth.com/mod/legacy-fabric-api/versions?l=ornithe)
+legacy_fabric_version=1.14.0+1.8.9

After the Ploceus migration

You can now reload the Gradle project so that your workspace sets itself up.

Making sure everything is working correctly

The Ornithe port of Legacy Yarn is not perfect, so you might encounter missing mappings and compilation errors.

Fix them and test your mod to ensure everything works correctly before moving on to migrating to Feather, Ornithe’s own mappings.

Migrating to Feather

The actual migration

The steps are the same as when upgrading the Legacy Yarn build earlier. This time, the mappings source will be:

net.ornithemc:feather-gen2:<minecraft_version>+build.1:v2

Updating the build script

build.gradle

dependencies {
	...
-	mappings "net.legacyfabric:legacy-yarn:${project.minecraft_version}+build.2:v2"
+	mappings ploceus.featherMappings(project.rootProject.feather_build)
	...
}

Your workspace uses MCP

Migrating from Legacy Looming to Ploceus

settings.gradle

First of all, update the plugin repository list in your settings.gradle.

		maven {
-			name = "legacy-fabric"
-			url = "https://maven.legacyfabric.net/"
+			name = 'Ornithe Releases'
+			url = 'https://maven.ornithemc.net/releases'
+		}
+		maven {
+			name = 'Ornithe Snapshots'
+			url = 'https://maven.ornithemc.net/snapshots'
		}

build.gradle

Replace Legacy Looming with Ploceus.

plugins {
	id "net.fabricmc.fabric-loom-remap" version "${loom_version}"
-	id "legacy-looming" version "${loom_version}" // Version must be the same as fabric-loom's
+	id "ploceus" version "${loom_version}" // Version must be the same as fabric-loom's
	id "maven-publish"
}

Replace the Legacy Looming block with the Ploceus one and configure the intermediary generation.

-legacyLooming {
-	// 	The generation of intermediary to use, default is 1.
-	// 	legacy.yarn() will automatically point at the variant for the set intermediary generation.
-	// 	However do not forget to set the right build number of legacy yarn as they are different per variant.
-	//	intermediaryVersion = 2
-
-	// 	Whether to use Legacy Fabric intermediaries or upstream/official FabricMC ones.
-	//	Default to true: use Legacy Fabric intermediaries.
-	// 	If set to false, don't forget to also set intermediaryVersion to generation 2.
-	//	useLFIntermediary.set(false)
+ploceus {
+	setIntermediaryGeneration(2)
}

Add the Legacy Fabric Maven repository to the dependencies repository list and remove the cursed-mappings one.

repositories {
	// Add repositories to retrieve artifacts from here.
	// You should only use this when depending on other mods because
	// Loom automatically adds the essential Maven repositories.
	// See https://docs.gradle.org/current/userguide/declaring_repositories.html
	// for more information about repositories.
-	maven {
-		name = "cursed-mappings"
-		url = "https://raw.githubusercontent.com/BleachDev/cursed-mappings/main/"
+	maven {
+		name = "legacy-fabric"
+		url = "https://maven.legacyfabric.net/"
	}
}

Replace the cursed-mappings MCP port with the Ploceus integration.

dependencies {
	...
-	mappings(legacy.yarn(project.minecraft_version, project.yarn_build))
+	mappings ploceus.mcpMappings(project.mcp_channel, project.minecraft_version, project.mcp_build)
	...
}

Update the Legacy Fabric API dependency to point to the Ornithe port, add OSL to the workspace, and remove explicit dependencies that are now provided by default by Ornithe, such as Gson.

dependencies {
	...
-	modImplementation "net.legacyfabric.legacy-fabric-api:legacy-fabric-api:${project.fabric_version}"

+	ploceus.dependOsl(project.osl_version)
+	modImplementation "net.legacyfabric.ornithed.legacy-fabric-api:legacy-fabric-api:${project.legacy_fabric_version}"
	...
}

gradle.properties

Example update:

# Done to increase the memory available to Gradle.
org.gradle.jvmargs=-Xmx1G
org.gradle.parallel=true

# Fabric Properties
# More versions available at: https://legacyfabric.net/usage.html
minecraft_version=1.8.9
-yarn_build=mcp
+mcp_channel=stable
+mcp_build=20
loader_version=0.18.3
loom_version=1.15-SNAPSHOT

# Mod Properties
mod_version=1.0.0
maven_group=net.legacyfabric
archives_base_name=legacy-fabric-example-mod

# Dependencies
+# OSL
+osl_version=0.17.1
# Legacy Fabric API
-# Check availability for your MC version at https://legacyfabric.net/usage.html
-fabric_version=1.13.2+1.8.9
+# Check availability for your MC version on [Modrinth](https://modrinth.com/mod/legacy-fabric-api/versions?l=ornithe)
+legacy_fabric_version=1.14.0+1.8.9
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment