[Development Guides Home](/guides) >> [Guide to the Feature Showcase](/guides/guide-to-the-feature-showcase) # Guide to the Feature Showcase - The drivers.json File ## Introduction Warning: cPanel & WHM displays the *Feature Showcase* after installation. Because of this, *Feature Showcase* items can overwrite some settings, like [cpanel.config](https://docs.cpanel.net/knowledge-base/cpanel-product/the-cpanel-config-file/) file contents. The *Feature Showcase* system uses the `drivers.json` file to define *Feature Showcase* items. To remove a *Feature Showcase* item, remove the appropriate `drivers.json` file from the `/usr/local/cpanel/Cpanel/Config/ConfigObj/Driver/` directory. If you want the item to do something that cPanel & WHM doesn't include, write your own custom module with the function. ## The Cpanel/Config/ConfigObj/Driver/drivers.json files The `/usr/local/cpanel/Cpanel/Config/ConfigObj/Driver/` directory contains individual `drivers.json` files, where `drivers` is the name of the object driver. Filenames **must** be all lowercase letters. Each *Feature Showcase* item's hash includes the following items: | Parameter | Type | Description | Possible Values | Example | | --- | --- | --- | --- | --- | | `spec_version` | *integer* | **Required** The specification version that the item uses. | `2` is the only possible value. | `2` | | `meta` | *hash* | A hash that contains metadata for the item. | A hash that contains these parameters:`meta_version``content``Showcase` | | |         `auto_enable` | *Boolean* | Whether the system automatically enables the item for new installations. This parameter defaults to `0`. The `meta` hash includes this parameter. **Note**: If you set this value to `1`, you **must** replace the `showcase` hash with an integer value of `-1`. | `1` — Default enabled.`0` — Default disabled. | `0` | |         `meta_version` | *integer* | **Required** The specification version that the metadata uses. The `meta` hash includes this parameter. | `2` is the only possible value. | `2` | |         `content` | *hash* | A hash that contains information about the item's author. The `meta` hash includes this hash. | A hash that contains these parameters:`vendor``url``name``readonly``first_appears_in``last_appears_in``abstract``version``locale_abstract_strings``showcase` | | |                 `vendor` | *string* | The vendor's name.The `content` hash includes this parameter. | A valid string. | `WebPros International, LLC` | |                 `url` | *string* | A URL to display as the *More information* link.The `content` hash includes this parameter. | A valid URL. | `http://www.cpanel.net/` | |                 `name` | *hash* | A hash of display name information for the *Feature Showcase* item. The `content` hash includes this hash. | A hash that contains the short and long parameters. | | |                         `short` | *string* | A short version of the item's display name. The `name` hash includes this parameter.**Note:** We recommend setting this value to `30` characters or less. This avoids overlap in the user interface. | A valid string. | `Example Driver` | |                         `long` | *string* | **Required** A long version of the item's display name. The `name` hash includes this parameter. | A valid string. | `Example Driver for Developer Usage` | |                 `readonly` | *Boolean* | Whether to display the *Enable* and *Disable* options for this item. The `content` hash includes this parameter. | `0` — Display`1` — **Don't** display. | `1` | |                 `first_appears_in` | *integer* | **Required** The first version of cPanel & WHM to display the item. The `content` hash includes this parameter. | A valid even integer corresponding to a cPanel & WHM main release. | `74` | |                 `last_appears_in` | *integer* | **Required** The last version of cPanel & WHM to display the item. The `content` hash includes this parameter. | A valid even integer corresponding to a cPanel & WHM main release. | `78` | |                 `abstract` | *string* | A description that appears if the locale system can't process the `locale_abstract_strings` and `locale_abstract_params` parameters. The `content` hash includes this parameter. | A valid string. | `An example driver for developers to emulate.` | |                 `version` | *integer* | The version of the item. The `content` hash includes this parameter. | A valid positive integer. | `1` | |                 `locale_abstract_strings` | *array* | An array of localized strings from the description of the item. The `content` hash includes this array. | An array of localized text and associated parameters. For more information, read our [Guide to Locales](/guides/guide-to-locales) documentation. | For an example, see the [Parameter Examples](#parameter-examples) section below. | |                 `showcase` | *hash or integer* | Whether to recommend or spotlight the item. The `meta` hash contains this hash. **Note:** If you set the `auto_enable` parameter to `1`, you **must** set this to a value of -`1`. | A hash containing the `is_recommended` and `is_showcase_feature` parameters.-`1` — The value of the `auto_enable` parameter is `1`. | For an example, see the [Parameter Examples](#parameter-examples) section below. | |                         `is_recommended` | *Boolean* | Whether to recommend the item. The `showcase` hash contains this parameter. This parameter defaults to `0`. **Note:** If you enable both the `is_recommended` and `is_spotlight_feature` parameters, the *Feature Showcase* uses the`is_recommended` parameter. | `1` — Recommend.`0` — Do **not** recommend. | `0` | |                         `is_spotlight_feature` | *Boolean* | Whether to spotlight the item. The `showcase` hash contains this parameter. This parameter defaults to `0`. | `1` — Spotlight.`0` — **Don't** spotlight. | `0` | | `enable` | *hash* | **Optional** A hash of information on handling an *Enable* action. For an example, see the [Actions](#actions) section below. | `static` — Set a static value.`module`, `method`, `params` — Call a module's function with a set of parameters. | For an example, see the [Parameter Examples](#parameter-examples) section below. | | `disable` | *hash* | **Optional** A hash of information on handling a *Disable* action. For an example, see the [Actions](#actions) section below. | `static` — Set a static value.`module`, `method`, `params` — Call a module's function with a set of parameters. | For an example, see the [Parameter examples](#parameter-examples) section below. | | `set_default` | *Boolean* | **Optional** Whether to set *Enable* or *Disable* as the default value. This parameter defaults to a value of `0`. **Note:**The value of the `readonly` parameter **must** be `0` for this parameter to function.For an example, see the [Actions](#actions) section below. | `static` — Set a static value.`module`, `method`, `params` — Call a module's function with a set of parameters.**Note:** We usually recommend enabling new features. To do this, set the `set_default` parameter to a value of `1`. | `1` | | `handle_showcase_submission` | *hash* | **Optional** A hash of information on handling form data entry. For an example, see the [Actions](#actions) section below. | `static` — Set a static value.`module`, `method`, `params` — Call a module's function with a set of parameters. | For an example, see the [Parameter examples](#parameter-examples) section below. | | `precheck` | *hash* | **Optional** A hash that contains additional information on how to determine whether the *Feature Showcase* item should be shown. For an example, see the [Actions](#actions) section below. | `static` — Set a static value.`module`, `method`, `params` — Call a module's function with a set of parameters. | For an example, see the [Parameter Examples](#parameter-examples) section below. | ### Parameter examples `locale_abstract_strings` ``` "locale.maketext('An example driver for developers to emulate.')" ``` ``` "locale.maketext('Comes packed with meta examples that use cPanel’s localization system: [output,url,_`1`,Cpanel::Locale,target,_blank].','https://go.cpanel.net/localedocs')" ``` ``` "locale.maketext('[asis,cPanel®] does not translate strings. You will need to provide your own translations.') ``` `showcase` ``` "showcase" : { "is_recommended" : `0`, "is_spotlight_feature" : `0` } ``` `enable` ``` "enable" : {     "module" : "Whostmgr::TweakSettings",     "method" : "set_value",     "params" : [         "Main",         "userdirprotect",         `1`     ] } ``` `disable` ``` "disable" : {     "module" : "Whostmgr::TweakSettings",     "method" : "set_value",     "params" : [         "Main",         "userdirprotect",         `0`     ] } ``` `handle_showcase_submission` ``` handle_showcase_submission" : {     "module" : "Whostmgr::API::`1`::PublicContact",     "method" : "set_public_contact",     "params" : [         {             "name" : "FORM(public_contact_name)",             "url" : "FORM(public_contact_url)"         }     ] } ``` `precheck` ``` "precheck" : {     "module" : "Whostmgr::Store::Product::Example::Util",     "method" : "precheck",     "params" : [] } ``` ## Actions You can offer users a range of actions to perform in each item. Then, the system can determine additional actions for each user action. ### User actions Important: If you set the `readonly` parameter to `1`, the system disregards the *Enable* (`enable`), *Disable* (`disable`), and *Set Default* (`set_default`) actions. There are several actions to use: * `enable` — The user enables an item. * `disable` — The user disables an item. * `set_default` — Sets either the `enable` or `disable` options to the default value. * `handle_showcase_submission` — The user fills out a form for the item. * `precheck` — The user can run a precheck on the item. Within each user action section hash, you can declare system actions to perform. ## Returns *Feature Showcase* items return different values depending on the type of user action: * `enable and disable` — Return a value of `1` for success and `0` for failure. * `set_default` — Return a value of `0` for backwards compatibility with version `1`. * `handle_showcase_submission` — Return the form response. ## Installation and update behavior *Feature Showcase* items can perform differently on new installations and upgrades. To do this, create two separate JSON driver files with the same `enable` value: * The background JSON driver file **must** contain an `auto_enable` parameter with a value of `1`. This will automatically enable the item for new installations. * The activation or configuration JSON driver file **must** contain: * An `auto_enable` parameter with a value of `0`. * The `disable` parameter. * The `set_default` parameter.  The item will appear for upgraded systems and override the background item.