[[traits]]
= Traits

Traits are high level named features of Camel K that can be enabled/disabled or configured to customize the
behavior of the final integration.

Camel K provide sensible defaults for all such traits, taking into account the details of the target platform where
the integration is going to run into. However, it's possible for a **expert user** to configure them in
order to obtain a different behavior.

[[traits-configuration]]
== Configuration

Each trait has a unique ID that can be used to configure it using the command line tool.

E.g. in order to disable the creation of a Service for a integration, a user can execute:

```
kamel run --trait service.enabled=false file.groovy
```

The flag `--trait` can be also abbreviated with `-t`.

The `enabled` property is available on all traits and can be used to enable/disable them. All traits have their own
internal logic to determine if they need to be enabled when the user does not activate them explicitly.

Some traits share also a `auto` property that can be used to enable/disable auto-configuration of the trait based on the
environment. The auto-configuration mechanism is able to enable/disable the trait when the `enabled` property is not explicitly
set by the user and also change the trait configuration.

NOTE: Some traits are applicable only to specific platforms (see the "profiles" in the trait description page).

A trait may have additional properties that can be configured by the end user.

[[traits-integration-spec]]
=== Configure the Integration spec

Let's use a further example to show how to configure a trait in an `Integration`. If you want to set an additional `JVM` classpath pointing to a known dependency, we can use the CLI as we've seen above:

[source,console]
----
$ kamel run --trait jvm.classpath=/path/to/my.jar MyIntegration.java
----

The command is creating an `Integration` with the configuration below:

[source,yaml]
----
apiVersion: camel.apache.org/v1
kind: Integration
metadata:
  name: my-integration
spec:
  traits:
    jvm:
      configuration:
        classpath: /path/to/my.jar
...
----

The `.spec.traits` holds an array of traits, identified by their id (`jvm`, in this case). Then, the `.jvm.configuration.classpath` is the property we want to set. If you need to set a trait directly in the `Integration` spec, then, you should proceed in the way illustrated above.

[[traits-list]]
== List of available traits
There are indexCount:[] traits. See each trait description page for more information on a specific trait:

indexList::[]
