# Binary Plugin

version 9.2.0

Creating your own custom plugin might be a great solution when Gradle doesn’t offer the specific capabilities your project needs. This is where binary plugins come in.

A binary plugin is a plugin that is implemented in a compiled language and is packaged as a JAR file. Binary plugins must implement the `Plugin` interface.

## Implementing the Plugin Interface

For example, this is a very simple "Hello World" plugin:

build.gradle.kts

    abstract class SamplePlugin : Plugin<Project> { (1)
        override fun apply(project: Project) {  (2)
            project.tasks.register("ScriptPlugin") {
                doLast {
                    println("Hello world from the build file!")
                }
            }
        }
    }

    apply<SamplePlugin>() (3)

build.gradle

    class SamplePlugin implements Plugin<Project> { (1)
        void apply(Project project) {   (2)
            project.tasks.register("ScriptPlugin") {
                doLast {
                    println("Hello world from the build file!")
                }
            }
        }
    }

    apply plugin: SamplePlugin (3)

1 | Extend the `org.gradle.api.Plugin` interface.
2 | Override the `apply` method.

### 1. Extend the `org.gradle.api.Plugin` interface

Create a class that extends the `Plugin` interface:

build.gradle.kts

    abstract class SamplePlugin : Plugin<Project> {
    }

build.gradle

    class SamplePlugin implements Plugin<Project> {
    }

### 2. Override the `apply` method

Add tasks and other logic in the `apply()` method:

build.gradle.kts

    override fun apply() {
    }

build.gradle

    void apply(Project project) {
    }

Let’s take a look at a more realistic example next.

Next Step: Learn how to develop Binary Plugins >>