# Blade types

There are three types of Caplin Platform Blades.

## Adapter blade

This type of blade connects to, and supplies data to, a Liberator and/or Transformer. It consists of:

* An [integration adapter](../platform-architecture/putting-data-into-the-platform.md) (an executable binary file).
* Configuration for the Adapter (including its [DataSource configuration](../datasource/datasource-datasource-configuration.md))
* Configuration for the core components (Liberator and/or Transformer). This configuration enables the Adapter to exchange data with these core components.

Integration Adapters can be written in Java using the [Caplin Integration Suite](../cis/index.md), or in C using the [C DataSource API](https://docs.caplin.com/developer/api/datasource_c/latest/).

The diagram below illustrates the internal structure of a Java Adapter blade. Optional directories are shown in grey.

**Java adapter blade structure**

```plantuml
@startsalt
scale 1.25
{
{T
 + <color:maroon><&box></color>//**AdapterBladeName**//-//major.minor.patch//.zip
 ++ <color:goldenrod><&folder></color> blade_config
 +++ <color:cornflowerblue><&cog></color> fields.conf | <color:gray>Map of field names to field numbers</color>
 ++ <color:goldenrod><&folder></color> DataSource
 +++ <color:goldenrod><&folder></color> bin
 ++++ <color:cornflowerblue><&script></color> start-jar.sh  | <color:gray>Java DataSource start script</color>
 +++ <color:goldenrod><&folder></color> etc
 ++++ <color:silver><&folder> blades</color> | <color:gray>Configuration blades (optional)</color>
 +++++ <color:silver><&folder> //**ConfigBladeName**//</color>
 ++++++ <color:silver><&folder> Liberator</color>
 +++++++ <color:silver><&folder> etc</color>
 ++++++++ <color:silver><&cog> rttpd.conf</color>
 ++++++ <color:silver><&folder> Transformer</color>
 +++++++ <color:silver><&folder> etc</color>
 ++++++++ <color:silver><&cog> transformer.conf</color>
 ++++++ <color:silver><&folder> //**AdapterBladeName**//</color>
 +++++++ <color:silver><&folder> etc</color>
 ++++++++ <color:silver><&cog> datasource.conf</color>
 ++++++ <color:silver><&cog> control</color>
 ++++ <color:cornflowerblue><&cog></color> datasource.conf | <color:gray>Default //AdapterBladeName// configuration</color>
 +++ <color:goldenrod><&folder></color> lib
 +++ <color:goldenrod><&folder></color> var
 ++ <color:goldenrod><&folder></color> doc | <color:gray>Documentation</color>
 ++ <color:goldenrod><&folder></color> Liberator
 +++ <color:goldenrod><&folder></color> etc
 ++++ <color:cornflowerblue><&cog></color> rttpd.conf | <color:gray>Default Liberator configuration</color>
 ++ <color:goldenrod><&folder></color> overrides
 +++ <color:goldenrod><&folder></color> //**AdapterBladeName**//
 ++++ <color:goldenrod><&folder></color> DataSource
 +++++ <color:goldenrod><&folder></color> etc
 ++++++ <color:cornflowerblue><&cog></color> datasource.conf | <color:gray>//AdapterBladeName// configuration overrides</color>
 ++++ <color:goldenrod><&folder></color> Liberator
 +++++ <color:goldenrod><&folder></color> etc
 ++++++ <color:cornflowerblue><&cog></color> rttpd.conf | <color:gray>Liberator configuration overrides</color>
 ++++ <color:goldenrod><&folder></color> Transformer
 +++++ <color:goldenrod><&folder></color> etc
 ++++++ <color:cornflowerblue><&cog></color> transformer.conf | <color:gray>Transformer configuration overrides</color>
 ++ <color:goldenrod><&folder></color> Transformer
 +++ <color:goldenrod><&folder></color> etc
 ++++ <color:cornflowerblue><&cog></color> transformer.conf | <color:gray>Default Transformer configuration</color>
 ++ <color:cornflowerblue><&document></color> README.txt
}
}
@endsalt
```

For example Gradle projects that demonstrate how to build blades with the structure above, see the [Project Templates](https://github.com/caplin/project-templates) project in Caplin’s GitHub repository.

## Service blade

This type of blade contains a Liberator or Transformer module written in C, Java, or Lua. For example, a permissioning auth (authorisation) module that is loaded into Liberator, or Transformer’s Refiner (filtering and sorting) service.

**Service blade structure**

```plantuml
@startsalt
scale 1.25
{
{T
 + <color:maroon><&box></color>//**ServiceBladeName**//-//major.minor.patch//.zip
 ++ <color:goldenrod><&folder></color> blade_config
 +++ <color:cornflowerblue><&cog></color> bootstrap.conf
 ++ <color:goldenrod><&folder></color> doc
 ++ <color:goldenrod><&folder></color> Liberator
 +++ <color:goldenrod><&folder></color> etc
 ++++ <color:cornflowerblue><&cog></color> rttpd.conf | <color:gray>Default Liberator configuration</color>
 +++ <color:goldenrod><&folder></color> lib | <color:gray>Liberator service libraries</color>
 ++ <color:goldenrod><&folder></color> overrides
 +++ <color:goldenrod><&folder></color> //**ServiceBladeName**//
 ++++ <color:goldenrod><&folder></color> Liberator
 +++++ <color:goldenrod><&folder></color> etc
 ++++++ <color:cornflowerblue><&cog></color> rttpd.conf | <color:gray>Liberator configuration overrides</color>
 ++++ <color:goldenrod><&folder></color> Transformer
 +++++ <color:goldenrod><&folder></color> etc
 ++++++ <color:cornflowerblue><&cog></color> transformer.conf | <color:gray>Transformer configuration overrides</color>
 ++ <color:goldenrod><&folder></color> Transformer
 +++ <color:goldenrod><&folder></color> etc
 ++++ <color:cornflowerblue><&cog></color> transformer.conf | <color:gray>Default Transformer configuration</color>
 +++ <color:goldenrod><&folder></color> lib | <color:gray>Transformer service libraries</color>
 ++ <color:cornflowerblue><&cog></color> control
 ++ <color:cornflowerblue><&document></color> README.txt
}
}
@endsalt
```

For information on building Java Transformer service modules, see the links below:

* [Create a Java Transformer Module blade](cdf-create-a-java-based-transformer-service-blade.md)
* [JTM Gradle project template](https://github.com/caplin/project-templates/tree/master/jtm-template)
* [JTM (legacy) Gradle project template](https://github.com/caplin/project-templates/tree/master/jtm-legacy-template)

## Config blade

This type of blade consists solely of configuration files. Config blades are used for the following purposes:

* To enable and configure built-in functionality in Liberator and Transformer. A config blade is a convenient way to package related configuration options required by a built-in service. For a list of config blades in Liberator and Transformer, see [Built-in blades](cdf-built-in-blades.md).
* To deploy an adapter’s configuration files without deploying the adapter’s binary. This is commonly done during development of an adapter, when you need your adapter’s configuration deployed to one or more Deployment Frameworks, but you want to run the adapter manually within your IDE.

The diagram below illustrates how the LiberatorJMX config blade is packaged within the Liberator kit file. For clarity, some directories and files have been hidden.

**LiberatorJMX config blade**

```plantuml
@startsalt
scale 1.25
{
{T
 + <color:maroon><&box></color>**Liberator**-//major.minor.patch//.zip
 ++ <color:goldenrod><&folder></color> blade_config
 ++ <color:goldenrod><&folder></color> bin
 ++ <color:goldenrod><&folder></color> doc
 ++ <color:goldenrod><&folder></color> etc
 +++ <color:goldenrod><&folder></color> blades
 ++++ <color:goldenrod><&folder></color> **LiberatorJMX** | <color:gray>LiberatorJMX config blade</color>
 +++++ <color:goldenrod><&folder></color> **Liberator**
 ++++++ <color:goldenrod><&folder></color> **etc**
 +++++++ <color:cornflowerblue><&cog></color> **java.conf**
 +++++++ <color:cornflowerblue><&cog></color> **jmx.conf**
 +++++++ <color:cornflowerblue><&cog></color> **rttpd.conf**
 +++++ <color:cornflowerblue><&cog></color> **control**
 ++++ <color:goldenrod><&folder></color> ...
 +++ <color:cornflowerblue><&cog></color> rttpd.conf
 +++ <color:cornflowerblue><&cog></color> ...
 ++ <color:goldenrod><&folder></color> ...
 ++ <color:cornflowerblue><&document></color> README.txt
}
}
@endsalt
```

**Activating the LiberatorJMX blade**

```
$ ./dfw activate LiberatorJMX
```

**Deactivating the LiberatorJMX blade**

```
$ ./dfw deactivate LiberatorJMX
```
