diff --git a/package-lock.json b/package-lock.json
index 50f2115..93b8002 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4828,6 +4828,11 @@
         "is-number": "^7.0.0"
       }
     },
+    "toml": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz",
+      "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w=="
+    },
     "tough-cookie": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
diff --git a/package.json b/package.json
index e2da1f4..e773351 100644
--- a/package.json
+++ b/package.json
@@ -44,6 +44,7 @@
     "fast-glob": "^3.2.7",
     "formdata-node": "^4.2.4",
     "node-fetch": "^3.0.0",
-    "node-stream-zip": "^1.15.0"
+    "node-stream-zip": "^1.15.0",
+    "toml": "^3.0.0"
   }
 }
diff --git a/src/metadata/forge/forge-mod-metadata-reader.ts b/src/metadata/forge/forge-mod-metadata-reader.ts
new file mode 100644
index 0000000..d4af1c7
--- /dev/null
+++ b/src/metadata/forge/forge-mod-metadata-reader.ts
@@ -0,0 +1,18 @@
+import ModMetadata from "../../metadata/mod-metadata";
+import toml from "toml";
+import ZippedModMetadataReader from "../../metadata/zipped-mod-metadata-reader";
+import ForgeModMetadata from "./forge-mod-metadata";
+
+export default class ForgeModMetadataReader extends ZippedModMetadataReader {
+    constructor() {
+        super("META-INF/mods.toml");
+    }
+
+    protected loadConfig(buffer: Buffer): Record<string, unknown> {
+        return toml.parse(buffer.toString("utf8"));
+    }
+
+    protected createMetadataFromConfig(config: Record<string, unknown>): ModMetadata {
+        return new ForgeModMetadata(config);
+    }
+}
diff --git a/src/metadata/mod-metadata-reader-factory.ts b/src/metadata/mod-metadata-reader-factory.ts
index 0c8dfe8..f8b2921 100644
--- a/src/metadata/mod-metadata-reader-factory.ts
+++ b/src/metadata/mod-metadata-reader-factory.ts
@@ -1,4 +1,5 @@
 import FabricModMetadataReader from "./fabric/fabric-mod-metadata-reader";
+import ForgeModMetadataReader from "./forge/forge-mod-metadata-reader";
 import ModLoaderType from "./mod-loader-type";
 import ModMetadataReader from "./mod-metadata-reader";
 
@@ -8,6 +9,9 @@ export default class ModMetadataReaderFactory {
             case ModLoaderType.Fabric:
                 return new FabricModMetadataReader();
 
+            case ModLoaderType.Forge:
+                return new ForgeModMetadataReader();
+
             default:
                 throw new Error(`Unknown mod loader "${ModLoaderType.toString(loaderType)}"`);
         }