diff --git a/enigma/src/main/java/org/quiltmc/enigma/api/translation/representation/TypeDescriptor.java b/enigma/src/main/java/org/quiltmc/enigma/api/translation/representation/TypeDescriptor.java
index da232eca..e10cb578 100644
--- a/enigma/src/main/java/org/quiltmc/enigma/api/translation/representation/TypeDescriptor.java
+++ b/enigma/src/main/java/org/quiltmc/enigma/api/translation/representation/TypeDescriptor.java
@@ -13,6 +13,36 @@
import java.util.Map;
import java.util.function.UnaryOperator;
+/**
+ * Represents a Java type descriptor.
+ * Type descriptors are used to represent the types of elements such as arguments, fields, and method returns.
+ *
+ * Type descriptors can be formatted two different ways:
+ *
+ * -
+ * For objects, descriptors are formatted as {@code Lpackage/Class$Inner;}.
+ * The prefix {@code L} denotes the start of an object type, followed by the fully qualified name,
+ * and ending in {@code ;}.
+ *
+ * -
+ * For primitives, descriptors are formatted as a single, uppercase letter.
+ * Each primitive has its own designated letter, which is the first letter of its keyword for all but {@code boolean} and {@code long}:
+ *
+ * - {@code byte}: {@code B}
+ * - {@code char}: {@code C}
+ * - {@code short}: {@code S}
+ * - {@code int}: {@code I}
+ * - {@code long}: {@code J}
+ * - {@code float}: {@code F}
+ * - {@code double}: {@code D}
+ * - {@code boolean}: {@code Z}
+ *
+ *
+ *
+ *
+ *
+ * When representing an array type in a type descriptor, the descriptor is prefixed by {@code [}, such as {@code [I} or {@code [Lpackage/Class;}.
+ */
public class TypeDescriptor implements Translatable {
protected final String desc;