<#import "/templates/guide.adoc" as tmpl>
<#import "/templates/kc.adoc" as kc>

<@tmpl.guide
title="Enabling and disabling features"
summary="Understand how to configure {project_name} to use optional features"
includedOptions="features features-*">

{project_name} has packed some functionality in features, including some disabled features, such as Technology Preview and deprecated features. Other features are enabled by default, but you can disable them if they do not apply to your use of {project_name}.

== Enabling features

Some supported features, and all preview features, are disabled by default. To enable a feature, enter this command:

<@kc.build parameters="--features=\"<name>[,<name>]\""/>

For example, to enable `docker` and `token-exchange`, enter this command:

<@kc.build parameters="--features=\"docker,token-exchange\""/>

To enable all preview features, enter this command:

<@kc.build parameters="--features=\"preview\""/>

== Disabling features

To disable a feature that is enabled by default, enter this command:

<@kc.build parameters="--features-disabled=\"<name>[,<name>]\""/>

For example to disable `impersonation`, enter this command:

<@kc.build parameters="--features-disabled=\"impersonation\""/>

You can disable all default features by entering this command:

<@kc.build parameters="--features-disabled=\"default\""/>

This command can be used in combination with `features` to explicitly set what features should be available.
If a feature is added both to the `features-disabled` list and the `features` list, it will be enabled.

== Supported features

The following list contains supported features that are enabled by default, and can be disabled if not needed.

<@showFeatures ctx.features.supported/>

=== Disabled by default

The following list contains supported features that are disabled by default, and can be enabled if needed.

<@showFeatures ctx.features.supportedDisabledByDefault/>

== Preview features

Preview features are disabled by default and are not recommended for use in production.
These features may change or be removed at a future release.

<@showFeatures ctx.features.preview/>

== Deprecated features

<#if ctx.features.deprecated?has_content>

The following list contains deprecated features that will be removed in a future release. These features are disabled by default.

<@showFeatures ctx.features.deprecated/>

<#else>

There are no deprecated features in this {project_name} release.

</#if>

</@tmpl.guide>

<#macro showFeatures features>
<#list features as feature>
[.features-name]#${feature.name}#::
[.features-description]#${feature.description}#
</#list>
</#macro>