diff --git a/README.md b/README.md
index 7d47a9b..6a70957 100644
--- a/README.md
+++ b/README.md
@@ -20,44 +20,13 @@
 Projects define the name and version of the port, the URL to fetch source from,
 a list of modules (libraries) to build, and the build steps.
 
-```kotlin
-abstract class Port {
-    abstract val name: String
-    abstract val version: String
-    abstract val url: String
-
-    open val dependencies: List<String> = emptyList()
-    abstract val modules: List<Module>
-
-    open fun fetchSource(
-        sourceDirectory: File,
-        workingDirectory: File
-    ): Result<Unit, String>
-
-    open fun configure(
-        toolchain: Toolchain,
-        sourceDirectory: File,
-        buildDirectory: File,
-        installDirectory: File,
-        workingDirectory: File
-    ): Result<Unit, String>
-
-    open fun build(
-        toolchain: Toolchain,
-        buildDirectory: File
-    ): Result<Unit, String>
-
-    open fun install(
-        toolchain: Toolchain,
-        buildDirectory: File,
-        installDirectory: File
-    ): Result<Unit, String>
-}
-```
+See the [Port class] for documentation on the port API.
 
 Individual port files are kept in `ports/$name/port.kts`. For example, the cURL
 port is [ports/curl/port.kts](ports/curl/port.kts).
 
+[Port class]: src/main/kotlin/com/android/ndkports/Port.kt
+
 ## Building a Port
 
 ndkports requires an NDK to be used for building to be specified on the command
diff --git a/src/main/kotlin/com/android/ndkports/Port.kt b/src/main/kotlin/com/android/ndkports/Port.kt
index 1335cdc..2e0433f 100644
--- a/src/main/kotlin/com/android/ndkports/Port.kt
+++ b/src/main/kotlin/com/android/ndkports/Port.kt
@@ -49,27 +49,105 @@
     toolchain: Toolchain
 ): File = workingDirectory.parentFile.resolve("$name/install/${toolchain.abi}")
 
+/**
+ * A module exported by the package.
+ *
+ * As currently implemented by ndkports, one module is exactly one library.
+ * Prefab supports header-only libraries, but ndkports does not support these
+ * yet.
+ *
+ * Static libraries are not currently supported by ndkports.
+ *
+ * @property[name] The name of the module. Note that currently the name of the
+ * installed library file must be exactly `lib$name.so`.
+ * @property[includesPerAbi] Set to true if a different set of headers should be
+ * exposed per-ABI. Not currently implemented.
+ * @property[dependencies] A list of other modules required by this module, in
+ * the format described by https://google.github.io/prefab/.
+ */
 data class Module(
     val name: String,
     val includesPerAbi: Boolean = false,
     val dependencies: List<String> = emptyList()
 )
 
+/**
+ * The base class for all ports.
+ */
 abstract class Port {
+    /**
+     * The name of the port. Will be used as the package name in prefab.json.
+     */
     abstract val name: String
+
+    /**
+     * The version of the package.
+     *
+     * Used as the default for [prefabVersion] and [mavenVersion] when
+     * appropriate.
+     */
     abstract val version: String
+
+    /**
+     * The version to encode in the prefab.json.
+     *
+     * This version must be compatible with CMake's `find_package` for
+     * config-style packages. This means that it must be one to four decimal
+     * separated integers. No other format is allowed.
+     *
+     * If not set, the default is [version] as interpreted by
+     * [CMakeCompatibleVersion.parse].
+     *
+     * For example, OpenSSL 1.1.1g will set this value to
+     * `CMakeCompatibleVersion(1, 1, 1, 7)`.
+     */
     open val prefabVersion: CMakeCompatibleVersion
         get() = CMakeCompatibleVersion.parse(version)
+
+    /**
+     * The version to use for the maven package.
+     *
+     * This field allows versioning the maven package differently from the
+     * package itself, which is sometimes necessary given CMake's strict version
+     * format requirements.
+     *
+     * If not set, the default is [version].
+     *
+     * For example, this could be set to `"$name-$version-alpha-1"` to
+     * distribute an alpha of the package.
+     */
     open val mavenVersion: String
         get() = version
 
+    /**
+     * The relative path to the license file of this package.
+     *
+     * This file will be packaged in the AAR in the META-INF directory.
+     */
     open val licensePath: String = "LICENSE"
 
+    /**
+     * A description of the license (name and URL) for use in the pom.xml.
+     */
     abstract val license: License
 
+    /**
+     * A list of dependencies for this package.
+     *
+     * For example, curl depends on `listOf("openssl")`.
+     */
     open val dependencies: List<String> = emptyList()
+
+    /**
+     * A list of modules exported by this package.
+     */
     abstract val modules: List<Module>
 
+    /**
+     * The number of CPUs available for building.
+     *
+     * May be passed to the build system if required.
+     */
     protected val ncpus = Runtime.getRuntime().availableProcessors()
 
     fun run(
@@ -98,6 +176,18 @@
         return Result.Ok(Unit)
     }
 
+    /**
+     * Overridable build step for extracting the source package.
+     *
+     * @param[sourceTarball] The path to the source tarball.
+     * @param[sourceDirectory] The destination directory for the extracted
+     * source.
+     * @param[workingDirectory] The working top-level directory for this
+     * package.
+     * @return A [Result<Unit, String>][Result] describing the result of the
+     * operation. On failure, [Result.Error<String>][Result.Error] containing an
+     * error message is returned.
+     */
     open fun extractSource(
         sourceTarball: File,
         sourceDirectory: File,
@@ -114,6 +204,25 @@
         )
     }
 
+    /**
+     * Overridable build step for configuring the build.
+     *
+     * Any pre-build steps should be run here.
+     *
+     * In an autoconf build, this runs `configure`.
+     *
+     * @param[toolchain] The toolchain used for this build.
+     * @param[sourceDirectory] The directory containing the extracted package
+     * source.
+     * @param[buildDirectory] The directory to use for building.
+     * @param[installDirectory] The destination directory for this package's
+     * installed headers and libraries.
+     * @param[workingDirectory] The top-level working directory for this
+     * package.
+     * @return A [Result<Unit, String>][Result] describing the result of the
+     * operation. On failure, [Result.Error<String>][Result.Error] containing an
+     * error message is returned.
+     */
     open fun configure(
         toolchain: Toolchain,
         sourceDirectory: File,
@@ -122,11 +231,51 @@
         workingDirectory: File
     ): Result<Unit, String> = Result.Ok(Unit)
 
+    /**
+     * Overridable build step for building the package.
+     *
+     * In an autoconf build, this runs `make`.
+     *
+     * @param[toolchain] The toolchain used for this build.
+     * @param[buildDirectory] The directory to use for building.
+     * @return A [Result<Unit, String>][Result] describing the result of the
+     * operation. On failure, [Result.Error<String>][Result.Error] containing an
+     * error message is returned.
+     */
     open fun build(
         toolchain: Toolchain,
         buildDirectory: File
     ): Result<Unit, String> = Result.Ok(Unit)
 
+    /**
+     * Overridable build step for installing built artifacts for packaging.
+     *
+     * The install step is expected to install headers and libraries to the
+     * [installDirectory] with the following layout:
+     *
+     * [installDirectory]
+     *     include/
+     *         <package headers>
+     *     lib/
+     *         <package libraries>
+     *
+     * A matching `lib${module.name}.so` must be present in the `lib` directory
+     * for every item in [modules].
+     *
+     * Note that it is expected for all modules to use the same headers. This is
+     * currently the case for all ports currently maintained, but could change
+     * in the future.
+     *
+     * In an autoconf build, this runs `make install`.
+     *
+     * @param[toolchain] The toolchain used for this build.
+     * @param[buildDirectory] The directory containing build artifacts.
+     * @param[installDirectory] The destination directory for this package's
+     * installed headers and libraries.
+     * @return A [Result<Unit, String>][Result] describing the result of the
+     * operation. On failure, [Result.Error<String>][Result.Error] containing an
+     * error message is returned.
+     */
     open fun install(
         toolchain: Toolchain,
         buildDirectory: File,
