---
title: Shared plugin interfaces
description: Plugin implementations generally invoke methods categorized as either configurable or describable. This document describes these types of plugins and how they are used in PingFederate.
component: pingfederate
version: 13.1
page_id: pingfederate:sdk_developers_guide:pf_share_plugin_interface
canonical_url: https://docs.pingidentity.com/pingfederate/13.1/sdk_developers_guide/pf_share_plugin_interface.html
llms_txt: https://docs.pingidentity.com/pingfederate/llms.txt
docs_for_agents: https://developer.pingidentity.com/build-with-ai/docs-for-agents.md
revdate: July 5, 2022
section_ids:
  configurable-plugin: Configurable plugin
  describable-plugin: Describable plugin
---

# Shared plugin interfaces

Plugin implementations generally invoke methods categorized as either configurable or describable. This document describes these types of plugins and how they are used in PingFederate.

## Configurable plugin

Any custom plugin that requires UI settings is configurable and implements the `ConfigurablePlugin` interface. This ensures that PingFederate loads the plugin instance with the correct configuration settings.

All plugin types implement the `ConfigurablePlugin` interface and must define the following within the `ConfigurablePlugin` interface to enable configuration loading.

```
void configure(Configuration configuration)
```

During processing of a configurable plugin instance, PingFederate calls the `ConfigurablePlugin.configure()` method and passes a `Configuration` object. The `Configuration` object provides the plugin adapter instance configuration set by an administrator in the PingFederate UI.

The `SpAuthnAdapterExample.java` sample provided with the SDK shows how to use this method to initialize an adapter instance from a saved configuration. After your implementation loads the configuration values, the plugin instance can use them in other method calls.

## Describable plugin

Any plugin that requires configuration windows in the PingFederate administrative console is a describable plugin. Most plugins implement the `DescribablePlugin` interface to ensure that PingFederate renders the correct UI components based on the returned `PluginDescriptor`.

Adapter and custom data source plugins are special cases and do not implement the `DescribablePlugin` interface. However, they still return a plugin descriptor (`AuthnAdapterDescriptor` and `SourceDescriptor`) and are still describable plugins.

All describable plugins must define a UI descriptor. Use one of the following methods to implement a UI descriptor, depending on the type of plugin:

* For plugins using the `DescribablePlugin` interface

  ```
  PluginDescriptor getPluginDescriptor()
  ```

* For adapter plugins

  ```
  AuthnAdapterDescriptor getAdapterDescriptor()
  ```

* For custom data source plugins

  ```
  SourceDescriptor getSourceDescriptor()
  ```

Describable plugins can return a subclass of `PluginDescriptor`, so the return type might differ between plugin implementations. Your plugin implementation populates `PluginDescriptor` with `FieldDescriptors`, `FieldValidators`, and `Actions` and is presented as a set of UI components in the PingFederate administrative console.

|   |                                                                                                                                                                                                                                                                                                                            |
| - | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|   | Some plugin types offer concrete descriptor implementations for developers. The Javadocs and examples provided with the SDK show which descriptor classes are available for each plugin type. The examples also show you how to use `FieldDescriptors`, `FieldValidators`, and `Actions` to define your plugin descriptor. |
