aboutsummaryrefslogtreecommitdiff
path: root/mkdocs/src/doc/docs/developer_guide/plugin-development/introduction.md
blob: fbfb32ac7abcbe56e70733af2cbebb7c5f598f49 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Introduction to plugin development

In order to have an easier time developing plugins, it's a good idea to go through
[Dokka's internals](../architecture/architecture_overview.md) first to learn more about its
[data model](../architecture/data_model/documentables.md) and 
[extensions](../architecture/extension_points/introduction.md).

## Setup

### Template 

The easiest way to start is to use the convenient [Dokka plugin template](https://github.com/Kotlin/dokka-plugin-template).
It has pre-configured dependencies, publishing and signing of your artifacts.

### Manual

At a bare minimum, Dokka requires `Kotlin Gradle Plugin` and `dokka-core` dependencies:

```kotlin
plugins {
    kotlin("jvm") version "<kotlin_version>"
}

dependencies {
    compileOnly("org.jetbrains.dokka:dokka-core:<dokka_version>")
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}
```

In order to load a plugin into Dokka, your class must extend `DokkaPlugin` class. A fully qualified name of that class
must be placed in a file named `org.jetbrains.dokka.plugability.DokkaPlugin` under `resources/META-INF/services`. 
All instances are automatically loaded during Dokka setup using `java.util.ServiceLoader`.

## Extension points 

Dokka provides a set of entry points for which you can create your own implementations. If you are not sure which
extension point to use, have a look at [core extensions](../architecture/extension_points/core_extensions.md) and
[base extensions](../architecture/extension_points/base_extensions.md).

You can learn how to declare extension points and use extensions in
[Introduction to Extension points](../architecture/extension_points/introduction.md).

In case no suitable extension point exists for your use case, do share the details - it might be added in future
versions of Dokka.

## Example

You can follow the [sample plugin tutorial](sample-plugin-tutorial.md) which covers creation of a simple plugin: hide members
annotated with your own `@Internal` annotation, that is exclude these members from generated documentation.

Fore more practical examples, have a look at sources of [community plugins](../../community/plugins-list.md).

## Help

If you have any further questions, feel free to get in touch with maintainers via [Slack](../../community/slack.md) or
[GitHub](https://github.com/kotlin/dokka).