You are on page 1of 3

Dokka plugins

Edit page Last modified: 01 November 2023

Dokka was built from the ground up to be easily extensible and highly customizable,
which allows the community to implement plugins for missing or very specific
features that are not provided out of the box.

Dokka plugins range anywhere from supporting other programming language


sources to exotic output formats. You can add support for your own KDoc tags or
annotations, teach Dokka how to render different DSLs that are found in KDoc
descriptions, visually redesign Dokka's pages to be seamlessly integrated into your
company's website, integrate it with other tools and so much more.

If you want to learn how to create Dokka plugins, see Developer guides.

Apply Dokka plugins


Dokka plugins are published as separate artifacts, so to apply a Dokka plugin you only need
to add it as a dependency. From there, the plugin extends Dokka by itself - no further action
is needed.
Plugins that use the same extension points or work in a similar way can interfere with each
other. This may lead to visual bugs, general undefined behaviour or even failed builds.
However, it should not lead to concurrency issues since Dokka does not expose any mutable
data structures or objects.
If you notice problems like this, it's a good idea to check which plugins are applied and what
they do.

Let's have a look at how you can apply the mathjax plugin to your project:
Kotlin
Groovy
Maven
CLI
The Gradle plugin for Dokka creates convenient dependency configurations that allow you to
apply plugins universally or for a specific output format only.
dependencies {
// Is applied universally
dokkaPlugin("org.jetbrains.dokka:mathjax-plugin:1.9.10")

// Is applied for the single-module dokkaHtml task only


dokkaHtmlPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:1.9.10")

// Is applied for HTML format in multi-project builds


dokkaHtmlPartialPlugin("org.jetbrains.dokka:kotlin-as-java-plugin:1.9.10")
}
When documenting multi-project builds, you need to apply Dokka plugins within subprojects
as well as in their parent project.

Configure Dokka plugins


Dokka plugins can also have configuration options of their own. To see which options are
available, consult the documentation of the plugins you are using.

Let's have a look at how you can configure the DokkaBase plugin, which is responsible for
generating HTML documentation, by adding a custom image to the assets
(customAssets option), by adding custom style sheets (customStyleSheets option),
and by modifying the footer message (footerMessage option):
Kotlin
Groovy
Maven
CLI
Gradle's Kotlin DSL allows for type-safe plugin configuration. This is achievable by adding
the plugin's artifact to the classpath dependencies in the buildscript block, and then
importing plugin and configuration classes:
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.gradle.DokkaTask
import org.jetbrains.dokka.base.DokkaBaseConfiguration

buildscript {
dependencies {
classpath("org.jetbrains.dokka:dokka-base:1.9.10")
}
}

tasks.withType<DokkaTask>().configureEach {
pluginConfiguration<DokkaBase, DokkaBaseConfiguration> {
customAssets = listOf(file("my-image.png"))
customStyleSheets = listOf(file("my-styles.css"))
footerMessage = "(c) 2022 MyOrg"
}
}

Alternatively, plugins can be configured via JSON. With this method, no additional
dependencies are needed.
import org.jetbrains.dokka.gradle.DokkaTask

tasks.withType<DokkaTask>().configureEach {
val dokkaBaseConfiguration = """
{
"customAssets": ["${file("assets/my-image.png")}"],
"customStyleSheets": ["${file("assets/my-styles.css")}"],
"footerMessage": "(c) 2022 MyOrg"
}
"""
pluginsMapConfiguration.set(
mapOf(
// fully qualified plugin name to json configuration
"org.jetbrains.dokka.base.DokkaBase" to dokkaBaseConfiguration
)
)
}

You might also like